java物件導向(3)

釋懷355發表於2014-06-14
繼承
提高程式碼複用性
讓類與類之間產生了關係,有了這個關係,才有了多型的特性。
注意:千萬不要為了獲取其他類的功能,簡化程式碼而繼承。
必須是類與類之間有所屬關係才可以繼承。
class C
{
    void demo1(){}
}
class A extends C
{
    //void demo1(){}
    void demo2(){}
}
class B extends C
{
    //void demo1(){}
    void demo3(){}
}

Java語言中:java只支援單繼承,不支援多繼承
因為多繼承容易帶來安全隱患:當多個父類中定義了相同功能,
當功能內容不同時,子類物件不確定要執行哪一個。
但是java保留這種機制。並用另一種體現形式來完成表示。多實現。

java支援多層繼承。也就是一個繼承體系
如何使用一個繼承體系中的功能呢?
想要使用體系,先查閱體系父類的描述,因為父類中定義的是該體系中共性功能。
透過了解共性功能,就可以知道該體系的基本功能。
那麼這個體系已經可以基本使用了。
那麼在具體呼叫時,要建立最子類的物件,為什麼呢?
一是因為有可能父類不能建立物件,
二是建立子類物件可以使用更多的功能,包括基本的也包括特有的。

子父類出現後,類成員的特點:

類中成員:
1,變數。
2,函式。
3,建構函式。

1,變數
如果子類中出現非私有的同名成員變數時,
子類要訪問本類中的變數,用this
子類要訪問父類中的同名變數,用super。

super的使用和this的使用幾乎一致。
this代表的是本類物件的引用。
super代表的是父類物件的引用。

2,子父類中的函式。
當子類出現和父類一模一樣的函式時,
當子類物件呼叫該函式,會執行子類函式的內容。
如同父類的函式被覆蓋一樣。

這種情況是函式的另一個特性:重寫(覆蓋)

當子類繼承父類,沿襲了父類的功能,到子類中,
但是子類雖具備該功能,但是功能的內容卻和父類不一致,
這時,沒有必要定義新功能,而是使用覆蓋特殊,保留父類的功能定義,並重寫功能內容。

覆蓋:
1,子類覆蓋父類,必須保證子類許可權大於等於父類許可權,才可以覆蓋,否則編譯失敗。
2,靜態只能覆蓋靜態。

記住大家:
過載:只看同名函式的引數列表。
重寫:子父類方法要一模一樣。

3,子父類中的建構函式。

在對子類物件進行初始化時,父類的建構函式也會執行,
那是因為子類的建構函式預設第一行有一條隱式的語句 super();
super():會訪問父類中空引數的建構函式。而且子類中所有的建構函式預設第一行都是super();

為什麼子類一定要訪問父類中的建構函式。

因為父類中的資料子類可以直接獲取。所以子類物件在建立時,需要先檢視父類是如何對這些資料進行初始化的。
所以子類在物件初始化時,要先訪問一下父類中的建構函式。
如果要訪問父類中指定的建構函式,可以透過手動定義super語句的方式來指定。

注意:super語句一定定義在子類建構函式的第一行。

子類的例項化過程。

結論:
子類的所有的建構函式,預設都會訪問父類中空引數的建構函式。
因為子類每一個建構函式內的第一行都有一句隱式super();
當父類中沒有空引數的建構函式時,子類必須手動透過super語句形式來指定要訪問父類中的建構函式。

當然:子類的建構函式第一行也可以手動指定this語句來訪問本類中的建構函式。
子類中至少會有一個建構函式會訪問父類中的建構函式。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27026361/viewspace-1182852/,如需轉載,請註明出處,否則將追究法律責任。

相關文章