Java 繼承之子父類中的成員變數和函數

來源:互聯網
上載者:User

標籤:繼承   源碼   記憶體   class   對象   

成員變數:

先看這樣一段代碼:

//父類。class Fu{int num = 3;}class Zi extends Fu{int num = 4;void show(){System.out.println("num = "+this.num);}}class ExtendsDemo {public static void main(String[] args) {Zi z = new Zi();z.show();}}
從一張圖來看它的原理:



圖有點亂,看一下順序吧。在代碼中,super和this 的用法很相似,this代表的是本類對象的引用,super代表的是父類的記憶體空間。

成員函數:

【子父類中成員函數的特點】
特殊情況:子父類中的定義了一模一樣的函數。
啟動並執行結果:子類的函數在運行。
這種情況在子父類中,是函數的另一個特性:override(重寫,覆蓋,複寫)

重寫什麼時候用?舉例:

//描述手機。class Phone{int number;//打電話。void call(){}//來電顯示。void show(){sop("電話號碼.."+number);}}Phone p = new Phone();p.show();隨著電話的升級,只顯示號碼不爽,希望顯示姓名,照片。修改源碼,雖然費勁但是可以解決,不利於後期的維護和擴充。為了擴充方便。新功能是不是新的電話具備呢?單獨描述單獨封裝。新電話也是電話中的一種。繼承。直接擷取父類中的功能。但是新電話的來顯功能已經變化了。需要重新定義。那麼定義一個新功能合適嗎?比如newShow,不合適,因為父類已經將來顯功能定義完了,子類完全不需要重新定義新功能。直接用就可以了。如果子類的來顯功能內容不同。直需要保留來顯功能,定義子類的內容即可:這就是重寫的應用!class NewPhone extends Phone{String name;String picPath;//圖片路徑。void show(){//sop("電話號碼");super.show();//如果還需要父類中原有的部分功能,可以通過super調用。System.out.print("姓名"+name);System.out.print("照片"+picPath);}}
【重寫(覆蓋)的注意事項】

1,子類覆蓋父類,必須保證全要大於或者等於父類的許可權。
Fu:
private void show(){}

Zi:
public void show(){}
2,靜態覆蓋靜態。
寫法上稍微注意:必須一模一樣:函數的返回值類型 函數名 參數列表都要一樣。
【總結】
當一個類是另一個類中的一種時,可以通過繼承,來擴充功能。
如果從父類具備的功能內容需要子類特殊定義時,使用重寫。


++【子父類中建構函式的特點】
當子父類都有建構函式時,發現結果為:
fu constructor run
zi constructor run
先執行了父類的建構函式,再執行子類的建構函式。


【這是為啥呢?】
因為子類的所有的建構函式中的第一行都有一句隱式語句 super(); //預設調用的是父類中的空參數的建構函式。

【子類中的建構函式為什麼有一句隱式的super()呢?】
原因:子類會繼承父類中的內容,所以子類在初始化時,必須先到父類中去執行父類的初始化動作。
才可以更方便的使用父類中的內容。

【小結】
當父類中沒有空參數建構函式時,子類的建構函式必須同構顯示的super語句指定要訪問的父類中的建構函式。
這就是傳說中的子類執行個體化過程。

【執行個體化過程的細節】
1,如果子類的建構函式第一行寫了this調用了本類其他建構函式,那麼super調用父類的語句就沒有了,因為this()或者super(),只能定義在建構函式的第一行,因為初始化動作要先執行。

2,父類建構函式中是否有隱式的super呢?
有。記住:只要是建構函式預設第一行都是super();
父類的父類是誰呢?super調用的到底是誰的建構函式呢?
Java體系在設計,定義了一個所有對象的父類Object ,

【總結】
類中的建構函式預設第一行都有隱式的super()語句,在訪問父類中的建構函式。
所以父類的建構函式既可以給自己的對象初始化,也可以給自己的子類對象初始化。

如果預設的隱式super語句沒有對應的建構函式,必須在建構函式中通過this或者super的形式明確調用的建構函式。

【問題】
1,this語句和super語句是否可以在同一個建構函式中出現呢?不行,因為必須定義在第一行。
2,為什麼要定義在第一行呢?因為初始化動作要先執行。


Java 繼承之子父類中的成員變數和函數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.