1. 我們先定義一個抽象人類,命名爲AbstactPerson
1. 類繼承使用關鍵字extends, 在java中類只能單繼承
2. 一個類用abstract修飾, 那麼這個類就是抽象類
3. 抽象類可以繼承其他類和接口, 而且不需要實現或者重寫其中的方法
4. 抽象類不能實例化, 實例化的話只能使用匿名內部類 , 但是可以聲明一個抽象類的引用
5. 如果一個子類沒有實現抽象父類所有的abstract方法,那麼這個子類必須要定義爲抽象類
6. 當一個非抽象子類實現了其抽象父類所有abstract方法(包括父類的父類中的abstract方法, 父類實現的接口中的abstract方法), 這個子類就可以定義爲普通類
7. abstract不能與static、private、final一起修飾方法,因爲這些方法不能被重寫
8. abstract不能作用與final,因爲final類不能被繼承
public abstract class AbstactPerson {
private Integer id;
private String name;
public AbstactPerson(Integer id, String name) {
this.id = id;
this.name = name;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public abstractvoid eat();
}
2. 我們先定義一個抽象員工類,命名爲Employee
1. super關鍵字,主要是作用於子類的方法中, 用於指向父類對象, 可以
2. 訪問父類的屬性、調用父類的普通方法和構造方法
3. 子類的構造函數第一行會默認調用父類無參的構造函數,及隱式調用super();
4. 如果父類中沒有無參構造器 , 那麼必須顯示調用super的有參構造方法
5. super不能賦值給變量, 它只是一個指示編譯器調用超類方法的特殊關鍵字。
public abstract class AbstactEmployee extends AbstactPerson {
private String company;
public AbstactEmployee(Integer id, String name) {
super(id, name);
}
public AbstactEmployee(Integer id, String name, String company) {
super(id,name);
this.company = company;
}
public abstractvoid eat();
}
3. 我們先定義一個學生類,命名爲Student
1. this關鍵字指向當前對象本身, 可以賦值給其他變量
2. this可以調用當前類中的屬性、普通方法和構造方法
3. 當形參和成員變量名稱一樣的時候,可以用this區分
public class Student extends AbstactPerson {
private String school;
public Student(Integer id, String name) {
super(id, name);
}
public Student(Integer id, String name, String school) {
this(id, name);
this.school = school;
}
@Override
public void eat() {
System.out.println("在學校食堂吃飯");
}
}