1. 程式人生 > >Java基礎知識回顧之繼承性

Java基礎知識回顧之繼承性

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類中的構造方法
	}
}