包含抽象方法的类叫做抽象类。如果一个类包含一个或多个抽象方法,该类必须限定为抽象的。(否则,编译器会报错)
抽象方法,仅有声明而没有方法体:abstract void f();
如果从一个抽象类继承,并想创建该新类的对象,那么就必须为基类中的所有抽象方法提供方法定义。如果不这样做,那么导出类也是抽象类,且编译器会强制我们用abstract关键字来限定这个类。
我们也有可能会创建一个没有任何抽象方法的抽象类。考虑这种情况:如果有一个类,让其包含任何abstract方法都显得没有实际意义,而且我们也想要阻止产生这个类的任何对象,那么这时这样做就很有用了。
创建抽象类和抽象方法非常有用,因为他们可以使类的抽象性明确起来,并告诉用户和编译器打算怎么来使用他们。抽象类还是很有用的重构工具,因为他们使得我们可以很容易地将公共方法沿着继承层次结构向上移动。
接口与抽象类的异同点:
共性:都是不断抽取出来的抽象的概念。
区别1:抽象类体现继承关系,一个类只能单继承。
接口体现实现关系,一个类可以多实现。
区别2:抽象类是继承,是“is a”关系,定义该体系的基本共性内容。extends决定本质
接口是实现,是“like a”关系,定义体系的额外功能。 implements影响扩展
区别3:抽象类中可以定义抽象方法和非抽象方法,子类继承后,可以直接使用非抽象方法。
接口中只能定义抽象方法,必须由子类去实现。
接口中的成员都有固定修饰符。