1.接口
所有接口中的方法必须是public
1.1 interface中的方法默认为public static 的(用其他关键字,比如private、protected、static、final等修饰会报编译错误。
1.2 变量默认为public static final (并且只能是public static final变量,用private修饰会报编译错误)
1.3 接口中所有的方法不能有具体的实现,也就是说,接口中的方法必须都是抽象方法
1.4 允许一个类遵循多个特定的接口
2.抽象类
包含抽象方法的类称为抽象类,但并不意味着抽象类中只能有抽象方法,它和普通类一样,同样可以拥有成员变量和普通成员方法。注意,抽象类和普通类的主要区别有三点:
1)抽象方法必须未public 或者protected (因为要被继承)
2)抽象类不能用来创建对象
3)如果一个类继承了一个抽象类,则子类必须实现父类的抽象方法或者子类也为抽象类
4)如果抽象类中没有实现接口中的方法,那么其子类必须实现接口中的方法,否则编译不通过
3.抽象类和接口的区别
1.1 语法层面上的区别
1)一个类只能继承一个抽象类,而一个类却可以实现多个接口。
2)抽象类中的成员变量可以是各个类型的,而接口中的成员变量只能是 public static final 类型的;抽象类中的方法可以是 public 或者 protected ,而接口只能是public 类型。
3)抽象类可以提供成员方法的实现细节,而接口不能有具体的实现细节;
4)接口中不能含有静态代码块以及静态方法,而抽象类可以有;
5)实现接口必须实现接口中的所有方法,而抽象类可以只继承某一个方法即可,但抽象类的抽象方法必须全部继承 (本质为类和接的区别 )
1.2 设计层面上的区别
1)抽象类是对一种事物的抽象,即对类抽象(如果一个类继承了某个抽象类,则子类必须是抽象类的种类),而接口是对行为的抽象(接口实现是有没有、具备不具备的关系)
2)抽象类作为很多子类的父类,它是一种设计模板。接口是一种行为规范
相关问题:
在Java中,接口可以继承接口吗?
不仅可以继承,还可以多继承。可以用来扩展功能,这样不用修改父接口,方便维护。
抽象类和接口的综合使用:
在适配器模式下,一般让抽象类简单实现接口的某些方法,这样继承与抽象类的普通类就不用去实现接口中的所有方法了。