Java基礎知識回顧之繼承性
阿新 • • 發佈:2018-12-08
Java基礎知識回顧之封裝性
Java基礎知識回顧之繼承性
Java基礎知識回顧之多型性
簡介
繼承的最大特徵是解決程式碼的重用問題。特徵是,一個父類可以擁有多個子類。子類繼承父類的特性,並且子類可以有自己的"擴充套件特性"。
實現的方式
通過 class A extends B
類實現類的繼承。
子類也配稱為 派生類, 父類也配稱為 基類(超類、Super Class)
class 父類 {
}
class 子類 extends 父類 {
}
特性說明
- 子類繼承父類以後,父類中宣告的屬性、方法,子類就可以獲取到。
特別說明:當父類中有私有的屬性或方法時,子類同樣可以獲取得到,只是由於封裝性 的設計,使得子類不可以直接呼叫罷了。如果需要訪問,可以使用 super.屬性
- 子類除了通過繼承,獲取父類的結構之外,還可以定義自己的持有的成分。
extends:子類是對父類功能的“擴充套件”,明確子類不是父類的子集。
繼承的限制
程式碼例項
繼承性實現的方式
在下面的程式碼中,Student
類是沒有名稱和年齡的屬性,僅僅只是繼承了 Person
類,然後在本類中定義了特有的屬性。
class Person{
private String name;
private int age;
// getter 與 setter
public void setName(String name) {this.name = name;}
public String getName() {return this.name;}
public void setAge(int age) {this.age = age;}
public int getAge() {return this.age;}
}
class Student extends Person{ // 子類繼承 父類的
// 子類特有的屬性
private String school;
public String getSchool() {return school;}
public void setSchool(String school) {this.school = school;}
}
public class TestDemo {
public static void main(String[] args) {
Student student = new Student();
// 來自父類中的屬性
student.setAge(20);
student.setName("張三");
// 來自本類中的屬性
student.setSchool("哈佛學院--哈爾濱大學佛學院");
// 姓名:張三, 年齡:20, 學校:哈佛學院--哈爾濱大學佛學院
System.out.println("姓名:"+ student.getName() + ", 年齡:"+ student.getAge() +", 學校:"+ student.getSchool());
}
}
子類初始化的順序
在子類物件構造器呼叫之前,一定會預設的呼叫父類的構造(預設使用父類的無參構造),以保證父類的物件先例項化,而後在例項化子類物件。
當子類在初始化的時候,會呼叫子類的構造方法,而此時會先去執行呼叫 super()
,預設的就會去呼叫,寫與不寫都是沒有關係的。
class A{
A(){ // A的無參構造方法
System.out.println("A類中的構造方法");
}
}
class B extends A{
B(){ // B的無參構造方法
// super(); 父類中存在有無參構造方法時,加與不加是沒有區別的
System.out.println("B類中的構造方法");
}
}
public class TestDemo {
public static void main(String[] args) {
new B();
// 輸出的結果:
// A類中的構造方法
// B類中的構造方法
}
}