時間久了就容易記不清了,特留存備用查看
c++
1.構造函數調用 常用初始化列表 或者顯示調用
1.1同一個類中構造函數調用構造函數 盡量不要這樣做,因為結果不確定!避免麻煩
可以把共用的代碼封裝成一個私有的成員函數,然后在構造函數內統一調用。
1.2子類構造函數調用基類構造函數
-----基類有默認構造函數時,可以在子類不寫,則隱式調用
-----基類無/有默認構造函數時,在子類構造函數初始化列表處調用,則顯示調用 基類類名(參數)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
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(參數)
1
2
3
4
5
6
7
8
9
10
11
12
13
|
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(參數)
1
2
3
4
5
6
7
|
class Man extends Person { public Man(String name, int age) { //System.out.println("===="); //不能再非構造函數中使用this調用構造函數 super (name, age, true ); // 必須在第一行 } } |
2.子類調用基類函數 super.函數名(參數)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
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關鍵字指明父類構造函數,當通過子類構造函數創建實例,會調用指明的、父類的構造函數
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對服務器之家的支持。如果你想了解更多相關內容請查看下面相關鏈接
原文鏈接:https://blog.csdn.net/jadeshu/article/details/87936571