面向对象二之抽象类

抽象方法和抽象类

抽象方法和抽象类必须使用abstract修饰符来定义,有抽象方法的类只能被定义为抽象类,抽象类里可以没有抽象方法。

抽象方法和抽象类的规则如下:
(1)抽象类必须使用abstract修饰符来修饰,抽象方法也必须使用abstract修饰符来修饰,抽象方法不能有抽象体。
(2)抽象类不能被实例化,无法使用new关键字来调用抽象类的构造器创建抽象类的实例。即使抽象类里不包括抽象方法,这个抽象类也不能创建实例。
(3)抽象类可以包含变量、方法(成员、普通变量和方法都行)、构造器、初始化块、内部类、枚举类6中成分。抽象类的构造器不能用于创建实例,主要用于被其子类调用。
(4)含有抽象方法的类只能被定义为抽象类。包括直接定义了一个抽象方法;继承了一个抽象父类,但没有完全实现父类包含的抽象方法,以及实现了一个接口,但没有完全实现接口包含的抽象方法3种情况。

定义抽象类只需在普通类上增加abstract修饰符即可。甚至一个普通类(没有包含抽象方法的类)增加abstract修饰符后也变成了抽象类。


image.png

注意:
(1)final和abstract不能同时存在。当使用abstract修饰类时,表明这个类只能被继承,当使用abstract修饰方法时,表面这个方法必须由子类提供实现(重写),而final修饰的类不能被继承,final修饰的方法不能被重写。
(2)abstract和private不能同时存在。abstract关键字修饰的方法必须由子类重写才有作用,因此不能时使用private访问权限。
(3)abstract和static不能同时修饰某个方法。当使用static修饰一个方法时,表明这个方法属于该类本身。但如果该方法被定义为抽象方法,则将导致通过该类来调用该方法时出现错误(调用了一个没有方法体的方法)。

抽象类的作用

抽象类体现的是一种模版模式的设计,抽象类作为多个子类的通用模版,子类在抽象类的基础上进行扩展、改造,但子类总体上会大致保留抽象类的行为方式。


image.png

image.png

模版模式的一些规则:
(1)抽象父类可以只定义需要使用的某些方法,把不能实现的部分抽象成抽象方法,留给其子类去实现;
(2)父类中可能包含需要调用的其他系列方法的方法,这些被调用方法既可以由父类实现,也可以由其子类实现。父类里提供的方法只是定义了一个通用算法,其实现也许并不完全由自身实现,而必须依赖其子类的辅助。

你可能感兴趣的:(面向对象二之抽象类)