抽象类
抽象类
-
在普通类的基础上扩充了一些抽象方法(0~n)的类(抽象类是普通类的超集),使用abstract关键字定义。
-
抽象类不能直接产生实例化对象,因为抽象类是“半成品”,无法直接使用。不能直接new
抽象方法
- 使用abstract 关键字定义并且没有方法体的方法。抽象方法所在类一定是抽象类。
抽象类的使用原则
- 所有抽象类必须有子类 :(abstract与final不能同时出现,编译出错)
- 如果子类不是抽象类 ,子类必须覆写抽象类(父类)的所有抽象方法。(子类是抽象类则可以不要求全部覆写)
- 抽象类可以使用子类向上转型对其实现实例化,抽象类一定不能直接实例化对象(无论是否有抽象方法)
- 由于抽象类强制要求子类覆写父类方法,所以private 与 abstract 不能同时使用。(private 修饰私有属性,被private修饰的属性和方法不能被外部使用)
抽象类的相关规定
- 抽象类也存在抽象方法,并且子类也一定按照构造实例化流程。先调用抽象类构造方法,再调用子类构造方法。
- 抽象类中允许不定义任何抽象方法,此时该抽象类仍然不能直接创建实例化对象
- 抽象类一定不能使用final 关键字声明,因为用final声明的类不允许有子类,而抽象类必须有子类
- 抽象类一定不能使用private 关键字声明,因为private 关键字表示封装,内部操作外部不可见,而抽象方法 必须被覆写。 - 抽象类也分内部抽象类和外部抽象类。内部抽象类的抽象方法与外部抽象类的抽象方法无关。当前直接继承哪个抽象类,就覆写其抽象方法。即:若直接继承外部抽象类,则只需覆写外部抽象类的所有抽象方法即可
- 外部类抽象类不允许使用static ,内部类抽象类可以使用static