抽象类
对一组对象进行更高层级抽象时, 形成现抽象的类, 就可以定义为抽象类
抽象类的理解
使用abstract修饰的类就是抽象类,普通类有的实例变量/实例方法/静态变量/静态方法/构造方法等所有成员都可以在抽象类中定义
抽象类也是用一种引用数据类型,可以定义变量,JAVA基本数据类型包括基本数据类型和引用数据类型,其中引用数据类型包括:类,接口,数组,枚举
抽象类不能实例化对象,抽象类的引用需要赋值子类对象
抽象类的几个问题
-
为什么定义抽象类?
对事物进行进一步抽象可以形成抽象类, 如动物类,交通工具类,食品类
含有抽象方法的类必须定义为抽象类 -
如何定义抽象类
使用abstract修饰的类 -
为什么定义抽象方法?
当一个类的某个操作无法具体实现时,这个操作可以定义为抽象方法
使用abstract修饰方法, 只有方法的声明, 没有方法体 -
如何使用抽象类
抽象类一般作为其他类的父类存在
子类继承了抽象类, 子类需要重写抽象类中所有的抽象方法, 如果子类没有重写所有的抽象方法,子类也需要定义为抽象类
注意:
抽象类中不一定含有抽象方法 -
抽象类不能实例化对象, 需要赋值子类对象
-
抽象类的引用可以赋值匿名内部类对象
-
.abstract 不能用来修饰属性,构造器,private,final,static。因为abstract修饰的类或方法都是要靠子类去继承和实现,首先属性不存在"尚未实现"这一说法,
同样构造器,static和private本身就不被子类继承,final修饰的类不被继承,修饰的方法不能被重写 所以和“abstract修饰的类或方法都是要靠子类去继承和实现”这一说法矛盾。