国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++/JAVA/C#子類調用父類函數情況總結

2020-05-23 12:53:28
字體:
來源:轉載
供稿:網友

時間久了就容易記不清了,特留存備用查看

c++

1.構造函數調用   常用初始化列表  或者顯示調用

1.1同一個類中構造函數調用構造函數   盡量不要這樣做,因為結果不確定!避免麻煩

可以把共用的代碼封裝成一個私有的成員函數,然后在構造函數內統一調用。

1.2子類構造函數調用基類構造函數

-----基類有默認構造函數時,可以在子類不寫,則隱式調用

-----基類無/有默認構造函數時,在子類構造函數初始化列表處調用,則顯示調用     基類類名(參數)

class Base{ public:   Base(int b) : m_b(b)   {   } private:   int m_b; }; class Derived : public Base { public:   //普通派生類構造函數的寫法   Derived(int b, int d) : Base(b), m_d(d)   {   } private:   int m_d;};

構造原則如下:

1. 如果子類沒有定義構造方法,則調用父類的無參數的構造方法。

2. 如果子類定義了構造方法,不論是無參數還是帶參數,在創建子類的對象的時候,首先執行父類無參數的構造方法,然后執行自己的構造方法。

3. 在創建子類對象時候,如果子類的構造函數沒有顯示調用父類的構造函數,則會調用父類的默認無參構造函數。

4. 在創建子類對象時候,如果子類的構造函數沒有顯示調用父類的構造函數且父類自己提供了無參構造函數,則會調用父類自己的無參構造函數。

5. 在創建子類對象時候,如果子類的構造函數沒有顯示調用父類的構造函數且父類只定義了自己的有參構造函數,則會出錯(如果父類只有有參數的構造方法,則子類必須顯示調用此帶參構造方法)。

6. 如果子類調用父類帶參數的構造方法,需要用初始化父類成員對象的方式

2.子類調用基類函數  類名::函數名(參數)

JAVA

1.構造函數調用  this(參數)   /  super(參數)

1.1同一個類中調用構造函數 [必須在構造函數中第一行]   this(參數)

class Person { private String name; private int age; private boolean sex; public Person() { this("jadeshu", 22, true); // 必須在第一行 不能同時調兩個不同的構造函數 } public Person(String name,int age, boolean sex) { this.name = name; this.age = age; this.sex = sex; }}

1.2子類構造函數調用基類構造函數 [必須在構造函數中第一行]  super(參數)

class Man extends Person { public Man(String name, int age) { //System.out.println("===="); //不能再非構造函數中使用this調用構造函數 super(name, age, true); // 必須在第一行 }}

2.子類調用基類函數  super.函數名(參數)

class Person { private String name; private int age; private boolean sex; public Person() { this("jadeshu", 22, true); // 必須在第一行 } public Person(String name, int age, boolean sex) { this.name = name; this.age = age; this.sex = sex; } public void person_test() { System.out.println("Person person_test() called!"); } public void sub_test() { System.out.println("Person sub_test() called!"); }}class Man extends Person { public Man(String name, int age) { //System.out.println("===="); super(name, age, true); // 必須在第一行 } public void sub_test() { System.out.println("Man sub_test() called!"); } public void sub() { person_test();   // 直接調用父類的函數[子類不存在person_test函數] super.sub_test(); // 調用父類中的函數[子類和父類存在同名函數時使用super.XXX] System.out.println("Man sub() called!"); }}

C#

1.構造函數調用 

1.1同一個類中構造函數調用構造函數    :this(參數列表)

1.2子類構造函數調用基類構造函數      :base(參數列表)

2.子類調用基類函數  base.父類方法();

  • ①.通過子類無參構造函數創建子類實例,會默認調用父類的無參構造函數
  • ②.通過子類有參構造函數創建子類實例,也會默認調用父類的無參構造函數
  • ③.在子類構造函數中通過base關鍵字指明父類構造函數,當通過子類構造函數創建實例,會調用指明的、父類的構造函數

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VEVB武林網的支持。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 从化市| 东海县| 云龙县| 潞西市| 惠来县| 宿松县| 灵武市| 曲麻莱县| 武山县| 黄石市| 当雄县| 周至县| 和田县| 吕梁市| SHOW| 礼泉县| 连州市| 宜宾市| 高陵县| 大悟县| 紫金县| 沽源县| 尉氏县| 白河县| 宁城县| 常熟市| 金川县| 蓬安县| 宣威市| 荔浦县| 渭南市| 郁南县| 辉南县| 武鸣县| 郎溪县| 古交市| 栾城县| 涡阳县| 抚远县| 龙南县| 化州市|