抽象类和抽象方法:
抽象方法格式:abstract void f();//仅声明而没有方法体
抽象类:包含抽象方法的类,如果一个类包含一个或多个抽象方法,该类必限定为抽象的
抽象类和普通类的区别:
- 抽象方法必须为public或protected或缺省
- 抽象类不能创建对象,即不能实例化
- 如果一个类继承于抽象类,则子类必须实现父类的抽象方法(所有),如果子类没有实现父类的抽象方法,则必须将子类也定义为abstract类
接口:
接口中可以含有变量或方法,接口中的变量被隐式地指定为public static final类型的,方法被隐式地指定为public abstract类型的(用其他关键字如private,protected,static,final均报错),并且接口中的方法不能有具体的实现,均为抽象类型
如果一个类(非抽象)遵循某个接口,就必须实现该接口的所有方法
对于遵循某个接口的抽象类,可以不用实现接口中的抽象方法(所有)
抽象类与接口的区别:
- 语言层面:
1:抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract的方法
2:抽象类中成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的
3:抽象类中可以有静态代码块或者静态方法,而接口中不能有
4:一个类中能继承一个抽象类,但却可以实现多个接口
- 设计层面:
抽象类是对一种事物的抽象,即对类的抽象,而接口是对行为的抽象(例子:将飞行的行为设计为接口,将鸟和飞机设计为抽象类)
抽象类是一种模板式的设计(如果为抽象类再添加一个方法,则无需修改继承抽象类的类),接口是一种行为规范,是辐射式设计(如果接口中添加一个新方法,则要修改所有实现该接口的类)(可以将固有的行为设计为抽象类,附加的行为设计为接口)