当多个类中出现相同功能,但是功能主体不同时,我们可以向上抽取,只抽取功能定义,而不抽取功能主体。
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类中所有抽象方法都进行了复写。
抽象类中可以不定义抽象方法,仅仅是为了不让该类建立对象
原文:https://www.cnblogs.com/liyuxin2/p/12307592.html