java和C++注意事項

來源:互聯網
上載者:User
1 . java中super的用法,是調用父類構造方法?那為什麼不直接繼承,要返回去再調用呢?
調用父類的的構造方法,因為構造方法不能被繼承,所以需要調用父類的,這裡分為兩種情況:1、當父類中有預設的建構函式時,子類自動調用父類的構造方法;2、當父類中有帶參數的建構函式時,子類需要使用super關鍵字調用父類的建構函式,而且必須放在子類構造方法的第一句。
任何類都有構造方法,哪怕是你不寫,也會預設有一個有無參構造方法。所以你的A裡面就會有一個叫A()的構造方法。當你new A()時,預設你有一個有無參構造方法A()的方法裡的第一句,會自動加上一個super();的方法,這句就是調用父類構造方法的意思,這是java規定的規則。你可以嘗試一下,在A裡寫一個構造方法:A(){super();   //這個一定要放在第一句System.out..XX;}這與你不寫super()這句效果是一樣的,因如果沒寫,java會預設在第一句加上super();
如果你是想在子類的建構函式中調用父類建構函式,則需要在子類的建構函式的函數體第一行(備註陳述式除外)使用:super(參數列表)的方式調用,該參數列表與父類有參建構函式聲明的參數列表一致,如果你不是在子類建構函式中調用,則無法直接調用父類建構函式,這時建立一個父類對象(通過你想調用的有參父類建構函式建立),就間接調用了該建構函式。

2 .如果父類只有有參數的建構函式,子類是否也無條件調用父類的有參建構函式呢?

子類可以無條件調用父類的無參數建構函式,如要調用有參數建構函式的話需要顯式調用,但如果子類中沒有顯式調用父類的建構函式時,會調用父類編譯器自動給加上的無參建構函式,你可以通過反編譯看到父類中多了一個無參的建構函式。如:
class Child {public static void main(String args[]){System.out.println("this is father class");}Child(){System.out.println("ok...");}}public class Parent extends Child{Parent(String a,String b){//super();//不管加不加這句,子類都預設調用父類無參構造方法System.out.println("this is child mudi struct method");}public static void main(String args[]){System.out.println("this is child class");Parent p = new Parent("xx","xx");}}

需要注意的是,java使用的都是控制代碼串連new對象的形式,並自動回收垃圾,而C++則是使用物件變數的形式,其建構函式在類對象定義時自動調用,賦值時調用拷貝構造
函數,而java只是複製一份控制代碼,對象沒有複製。

在java中,Parent p;表示未初始設定變數,不能使用。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.