现在的位置: 首页 > 综合 > 正文

关于面试中abstract 和 interface 的区别

2018年01月29日 ⁄ 综合 ⁄ 共 1771字 ⁄ 字号 评论关闭

这个在网上找了一些文章看了。说的好多,就决定自己用代码去实验一番。

public interface Demo1 {//接口的实验

    protected String aa = "可以有自己的属性变量";//报错,其实我只能是 public static final
    String bb(){
        System.out.println("不能带有自己的成员方法");//报错
    }
    
    public Demo1(){//报错
        System.out.println("没有自己的构造方法");
    }
    
    abstract void cc();//带上抽象方法

}

总结:1、接口可以带自己的变量和方法,变量必须是public static final(不写也可以,是默认的),方法只能是抽象的。

2、接口不能建构造方法。

==============================================================================================================

public abstract class Demo2 {

    protected String aa ="抽象类可以有自己的属性变量";//默认:friendly
    
    void bb() {
        System.out.println("抽象类可以有自己的成员方法");
    }
    
    abstract void cc();//这个需要去实现。。。
}

===========================================

public abstract class Demo3 extends Demo2{

    //虽然继承了抽象类Demo2,但是因为自己身上也有abstract标志,所以可以不去实现Demo2中的抽象方法。
    
    public Demo3(){
        //可以有构造方法。
    }
    
    abstract void dd();
}

===========================================

public class Demo4 extends Demo3 {

    @Override
    void dd() {
        // 必须要去实现Demo3中的抽象方法    

    }

    @Override
    void cc() {
        // 必须要去实现Demo2中的抽象方法

    }

}

通过抽象类Demo3继承抽象类Demo2,再用Demo4去继承抽象的Demo3。

总结:1、抽象类可以有自己的变量和方法,无限制。变量为friendly类型。

2、可以有构造方法。

从代码层可以知道这两点。

剩下的是需要自己去记的。

1.abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。接口继承接口,不能实现接口。抽象类继承抽象类,能实现接口。

    2.在abstract class 中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是public static final的,不过在 interface中一般不定义数据成员),所有的成员方法都是abstract的。

    3.abstract class和interface所反映出的设计理念不同。其实abstract class表示的是"is-a"关系,interface表示的是"like-a"关系。

    4.实现抽象类和接口的类必须实现其中的所有方法。抽象类中可以有非抽象方法。接口中则不能有实现方法。

    5.接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。

    6.抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值。

    7.接口中的方法默认都是 public,abstract 类型的。

方面 abstract interface
数据成员 有( friendly) 有(public static final)
成员方法 只有abstract的成员方法
构造方法
继承 抽象类、实体类 接口
实现 接口


抱歉!评论已关闭.