9、抽象类
程序员文章站
2022-07-12 14:57:18
...
一、抽象类(abstract)
当多个类中出现相同功能,但是功能主体不同,这时可以进行向上抽取,只抽取功能定义,而不抽取功能主体
二、抽象方法所在类一定要标示为抽象类,也就是说该类需要被abstract关键字所修饰
三、abstract可以修饰类和方法不能修饰变量
四、抽象类特点
- 抽象方法一定在抽象类中
- 抽象方法和抽象类都被abstract修饰
- 抽象类不能new对象,因为调用抽象方法没有意义
- 抽象类中的方法要被使用,必须由子类覆盖其所有的抽象方法后,建立子类对象调用。
- 如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类(即强迫子类重写)
abstract class Student { abstract void study(); } class BaseStudent extends Student { void study() { System.out.println("base study"); } } class AdvStudent extends Student { void study() { System.out.println("adv study"); } }
五、抽象类和一般类
- 两者没有太大的不同,该如何描述事物,就如何描述事物。
- 只不过,该事物出现了一些看不懂的东西,这些不确定的部分,也是该事物的功能,需要明确出现,但是无法定义主体,那么就通过抽象方法来表示
- 抽象类不能实例化
六、抽象关键字abstract和哪些不可以共存?
final,private,static
七、如果抽象类中有主函数,那是可以执行的,并且,非抽象方法可以调用抽象方法
import java.io.*; abstract class Demo { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String line = br.readLine(); System.out.println("<"+line+">"); } abstract void show(); void print() { System.out.println("你好"); show(); } } class D extends Demo { public void show() { System.out.println("run show"); } public static void main(String[] args) throws Exception { D d = new D(); d.print(); } }