1. 程式人生 > >java基礎個人筆記之繼承

java基礎個人筆記之繼承

繼承的好處:
1,提高了程式碼的複用性。
2,讓類與類之間產生了關係,給第三個特徵多型提供了前提.

java中支援單繼承。不直接支援多繼承,但對C++中的多繼承機制進行改良。

單繼承:一個子類只能有一個直接父類。

多繼承:一個子類可以有多個直接父類(java中不允許,進行改良)
不直接支援,因為多個父類中有相同成員,會產生呼叫不確定性。
在java中是通過"多實現"的方式來體現。

java支援多層(多重)繼承。

C繼承B,B繼承A。
就會出現繼承體系。

當要使用一個繼承體系時,
1,檢視該體系中的頂層類,瞭解該體系的基本功能。
2,建立體系中的最子類物件,完成功能的使用。

成員變數
當本類的成員和區域性變數同名用this區分。
當子父類中的成員變數同名用super區分父類。
this和super的用法很相似。
this:代表一個本類物件的引用。
super:代表一個父類空間。

當子父類中出現成員函式一模一樣的情況,會執行子類的函式。
這種現象,稱為覆蓋操作。這時函式在子父類中的特性。
函式兩個特性:
1,過載。同一個類中。overload
2,覆蓋。子類中。覆蓋也稱為重寫,覆寫。override

覆蓋注意事項:
1,子類方法覆蓋父類方法時,子類許可權必須要大於等於父類的許可權。
2,靜態只能覆蓋靜態,或被靜態覆蓋。

子父類中的建構函式的特點。

在子類構造物件時,發現,訪問子類建構函式時,父類也運行了。
為什麼呢?
原因是:在子類的建構函式中第一行有一個預設的隱式語句。 super();

子類的例項化過程:子類中所有的建構函式預設都會訪問父類中的空引數的建構函式。

為什麼子類例項化的時候要訪問父類中的建構函式呢?
那是因為子類繼承了父類,獲取到了父類中內容(屬性),所以在使用父類內容之前,
要先看父類是如何對自己的內容進行初始化的。

所以子類在構造物件時,必須訪問父類中的建構函式。
為什麼完成這個必須的動作,就在子類的建構函式中加入了super()語句。

如果父類中沒有定義空引數建構函式,那麼子類的建構函式必須用super明確要呼叫
父類中哪個建構函式。同時子類建構函式中如果使用this呼叫了本類建構函式時,
那麼super就沒有了,因為super和this都只能定義第一行。所以只能有一個。
但是可以保證的是,子類中肯定會有其他的建構函式訪問父類的建構函式。

注意:supre語句必須要定義在子類建構函式的第一行。因為父類的初始化動作要先完成。

class Fu
{
	Fu()
	{
		super();
		show();
		return;
	}
	void show()
	{
		System.out.println("fu show");
	}
}
class Zi extends Fu
{
	int num = 8;
	Zi()
	{
		super();
		//-->通過super初始化父類內容時,子類的成員變數並未顯示初始化。
		//等super()父類初始化完畢後,才進行子類的成員變數顯示初始化。

		System.out.println("zi cons run...."+num);
		return;
	}
	void show()
	{
		System.out.println("zi show..."+num);
	}
}
class ExtendsDemo5 
{
	public static void main(String[] args) 
	{
		Zi z = new Zi();
		z.show();
	}
}

/*
一個物件例項化過程:
Person p = new Person();
1,JVM會讀取指定的路徑下的Person.class檔案,並載入進記憶體,
並會先載入Person的父類(如果有直接的父類的情況下).
2,在堆記憶體中的開闢空間,分配地址。
3,並在物件空間中,對物件中的屬性進行預設初始化。
4,呼叫對應的建構函式進行初始化。
5,在建構函式中,第一行會先到呼叫父類中建構函式進行初始化。
6,父類初始化完畢後,在對子類的屬性進行顯示初始化。
7,在進行子類建構函式的特定初始化。
8,初始化完畢後,將地址值賦值給引用變數.

final關鍵字:
1,final是一個修飾符,可以修飾類,方法,變數。
2,final修飾的類不可以被繼承。
3,final修飾的方法不可以被覆蓋。
4,final修飾的變數是一個常量,只能賦值一次。
為什麼要用final修飾變數。其實在程式如果一個數據是固定的,
那麼直接使用這個資料就可以了,但是這樣閱讀性差,所以它該資料起個名稱。
而且這個變數名稱的值不能變化,所以加上final固定。
寫法規範:常量所有字母都大寫,多個單詞,中間用_連線。