java物件導向(3)
繼承
提高程式碼複用性
讓類與類之間產生了關係,有了這個關係,才有了多型的特性。
注意:千萬不要為了獲取其他類的功能,簡化程式碼而繼承。
必須是類與類之間有所屬關係才可以繼承。
必須是類與類之間有所屬關係才可以繼承。
class C
{
void demo1(){}
}
class A extends C
{
//void demo1(){}
void demo2(){}
}
class B extends C
{
//void demo1(){}
void demo3(){}
}
{
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,靜態只能覆蓋靜態。
記住大家:
過載:只看同名函式的引數列表。
重寫:子父類方法要一模一樣。
類中成員:
1,變數。
2,函式。
3,建構函式。
1,變數
如果子類中出現非私有的同名成員變數時,
子類要訪問本類中的變數,用this
子類要訪問父類中的同名變數,用super。
super的使用和this的使用幾乎一致。
this代表的是本類物件的引用。
super代表的是父類物件的引用。
2,子父類中的函式。
當子類出現和父類一模一樣的函式時,
當子類物件呼叫該函式,會執行子類函式的內容。
如同父類的函式被覆蓋一樣。
這種情況是函式的另一個特性:重寫(覆蓋)
當子類繼承父類,沿襲了父類的功能,到子類中,
但是子類雖具備該功能,但是功能的內容卻和父類不一致,
這時,沒有必要定義新功能,而是使用覆蓋特殊,保留父類的功能定義,並重寫功能內容。
覆蓋:
1,子類覆蓋父類,必須保證子類許可權大於等於父類許可權,才可以覆蓋,否則編譯失敗。
2,靜態只能覆蓋靜態。
記住大家:
過載:只看同名函式的引數列表。
重寫:子父類方法要一模一樣。
3,子父類中的建構函式。
在對子類物件進行初始化時,父類的建構函式也會執行,
那是因為子類的建構函式預設第一行有一條隱式的語句 super();
super():會訪問父類中空引數的建構函式。而且子類中所有的建構函式預設第一行都是super();
為什麼子類一定要訪問父類中的建構函式。
因為父類中的資料子類可以直接獲取。所以子類物件在建立時,需要先檢視父類是如何對這些資料進行初始化的。
所以子類在物件初始化時,要先訪問一下父類中的建構函式。
如果要訪問父類中指定的建構函式,可以透過手動定義super語句的方式來指定。
注意:super語句一定定義在子類建構函式的第一行。
子類的例項化過程。
結論:
子類的所有的建構函式,預設都會訪問父類中空引數的建構函式。
因為子類每一個建構函式內的第一行都有一句隱式super();
當父類中沒有空引數的建構函式時,子類必須手動透過super語句形式來指定要訪問父類中的建構函式。
當然:子類的建構函式第一行也可以手動指定this語句來訪問本類中的建構函式。
子類中至少會有一個建構函式會訪問父類中的建構函式。
在對子類物件進行初始化時,父類的建構函式也會執行,
那是因為子類的建構函式預設第一行有一條隱式的語句 super();
super():會訪問父類中空引數的建構函式。而且子類中所有的建構函式預設第一行都是super();
為什麼子類一定要訪問父類中的建構函式。
因為父類中的資料子類可以直接獲取。所以子類物件在建立時,需要先檢視父類是如何對這些資料進行初始化的。
所以子類在物件初始化時,要先訪問一下父類中的建構函式。
如果要訪問父類中指定的建構函式,可以透過手動定義super語句的方式來指定。
注意:super語句一定定義在子類建構函式的第一行。
子類的例項化過程。
結論:
子類的所有的建構函式,預設都會訪問父類中空引數的建構函式。
因為子類每一個建構函式內的第一行都有一句隱式super();
當父類中沒有空引數的建構函式時,子類必須手動透過super語句形式來指定要訪問父類中的建構函式。
當然:子類的建構函式第一行也可以手動指定this語句來訪問本類中的建構函式。
子類中至少會有一個建構函式會訪問父類中的建構函式。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27026361/viewspace-1182852/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- java物件導向作業3Java物件
- Java物件導向Java物件
- [Java物件導向]Java物件
- Java — 物件導向Java物件
- java-物件導向程式設計--(3)Java物件程式設計
- JAVA物件導向基礎--物件導向介紹Java物件
- Java:Java的物件導向Java物件
- java物件導向(上)Java物件
- java物件導向(中)Java物件
- JAVA物件導向思想Java物件
- [Java物件導向]finalJava物件
- Java物件導向(一)Java物件
- java的物件導向Java物件
- Java 物件導向概述Java物件
- Java物件導向——類與物件Java物件
- 11.物件導向(3)物件
- JAVA物件導向--抽象類Java物件抽象
- Java基礎 --- 物件導向Java物件
- Java物件導向--多型Java物件多型
- [Java物件導向]static方法Java物件
- JAVA物件導向之多型Java物件多型
- JAVA物件導向基礎Java物件
- 二、Java之物件導向Java物件
- java物件導向繼承Java物件繼承
- 物件導向-物件導向思想物件
- java基礎二:物件導向Java物件
- java物件導向作業4Java物件
- Java物件導向三大特徵Java物件特徵
- Java物件導向詳解-上Java物件
- java 物件導向必懂概述Java物件
- Java物件導向三大特性Java物件
- Java--物件導向設計Java物件
- 物件導向之封裝(Java)物件封裝Java
- Java語言之物件導向—類與物件(上)Java物件
- 【3】python入門-物件導向-2Python物件
- 面向Python,物件導向(基礎3)Python物件
- 好程式設計師Java教程分享Java物件導向與程式導向程式設計師Java物件
- java物件導向的面試題Java物件面試題
- Java007-物件導向(多型)Java物件多型