抽象方法和抽象类:由abstract修饰的方法为抽象方法,抽象发即只有方法的定义,没有方法体实现,用一个分号结尾。也可以将抽象方法理解为不完整的方法,若抽象方法包含在类中,则该类也应该为抽象的,可以理解为该类也不完整,抽象类由abstract关键字声明。

java学习之抽象类(java面向对象之抽象类)(1)

抽象类时不能实例化对象的,而一个类不能实例化是没有意义的,所以需要定义新类来继承抽象类,而如果一个类继承了抽象类。则其必须重写其抽象方法(变不完整为完整).

即使一个类中没有抽象方法,也可以将其定义为抽象类,同样,该类不能实例化,需要注意:abstract和final不能同时修饰一个类,因为final关键字使得类不可继承,而abstract修饰的类如果不能被继承将没有任何意义,两者放一起,将会冲突,使得该类没有意义。


继承抽象类:一个类被继承后,必须实现其抽象方法,不同的子类可以有不同的实现,

java学习之抽象类(java面向对象之抽象类)(2)

java学习之抽象类(java面向对象之抽象类)(3)

java学习之抽象类(java面向对象之抽象类)(4)


接口:接口间可以存在继承关系,即一个接口可以通过extends关键字继承另外一个接口。子接口因为继承了父接口中定义的方法。所以必须实现,如下代码:

java学习之抽象类(java面向对象之抽象类)(5)


java学习之抽象类(java面向对象之抽象类)(6)


接口和抽象类的区别:

一个类只能继承一个抽象类,但可以实现多个接口,

抽象类中可以包含抽象和非抽象方法,但接口中所以方法都是抽象的,

子类继承抽象类必须实现抽象类中所有的抽象方法,否则子类也必须是抽象类,而子类实现接口必须实现接口中的所有抽象方法,

java学习之抽象类(java面向对象之抽象类)(7)

,