当多个类中出现相同功能,但是功能主体不同时,我们可以向上抽取,只抽取功能定义,而不抽取功能主体。
抽象类的特点
- 抽象方法一定在抽象类中。
- 抽象方法和抽象类都必须被abstract关键字修饰。
- 抽象类不可以用new创建对象,因为调用抽象方法没有意义。
- 抽象类中的抽象方法要被使用,必须由子类复写所有的抽象方法后,才能建立子类对象调用。(如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类。)
abstract class Student {
abstract void study();
abstract void read();
void sleep() {
System.out.println("sleep");
}
}
class StudentClass1 extends Student {
void study() {
System.out.println("study Java");
}
void read() {
System.out.println("read book");
}
}
class StudentClass2 extends Student {
void study() {
System.out.println("study python");
}
void read() {
System.out.println("study magazine");
}
}
public class AbstractDemo {
public static void main(String[] args) {
StudentClass1 s1 = new StudentClass1();
StudentClass2 s2 = new StudentClass2();
s1.study();
s1.read();
s1.sleep();
s2.study();
s2.read();
s2.sleep();
}
}
运行结果
study Java
read book
sleep
study python
study magazine
sleep
StudentClass1类和StudentClass2类分别对Student类中所有抽象方法都进行了复写。
抽象类中可以不定义抽象方法,仅仅是为了不让该类建立对象