C++/JAVA/C#子類調(diào)用父類函數(shù)情況總結
時間久了就容易記不清了,特留存?zhèn)溆貌榭?/p>
c++
1.構造函數(shù)調(diào)用 常用初始化列表 或者顯示調(diào)用
1.1同一個類中構造函數(shù)調(diào)用構造函數(shù) 盡量不要這樣做,因為結果不確定!避免麻煩
可以把共用的代碼封裝成一個私有的成員函數(shù),然后在構造函數(shù)內(nèi)統(tǒng)一調(diào)用。
1.2子類構造函數(shù)調(diào)用基類構造函數(shù)
-----基類有默認構造函數(shù)時,可以在子類不寫,則隱式調(diào)用
-----基類無/有默認構造函數(shù)時,在子類構造函數(shù)初始化列表處調(diào)用,則顯示調(diào)用 基類類名(參數(shù))
class Base
{
public:
Base(int b) : m_b(b)
{
}
private:
int m_b;
};
class Derived : public Base
{
public:
//普通派生類構造函數(shù)的寫法
Derived(int b, int d) : Base(b), m_d(d)
{
}
private:
int m_d;
};
構造原則如下:
1. 如果子類沒有定義構造方法,則調(diào)用父類的無參數(shù)的構造方法。
2. 如果子類定義了構造方法,不論是無參數(shù)還是帶參數(shù),在創(chuàng)建子類的對象的時候,首先執(zhí)行父類無參數(shù)的構造方法,然后執(zhí)行自己的構造方法。
3. 在創(chuàng)建子類對象時候,如果子類的構造函數(shù)沒有顯示調(diào)用父類的構造函數(shù),則會調(diào)用父類的默認無參構造函數(shù)。
4. 在創(chuàng)建子類對象時候,如果子類的構造函數(shù)沒有顯示調(diào)用父類的構造函數(shù)且父類自己提供了無參構造函數(shù),則會調(diào)用父類自己的無參構造函數(shù)。
5. 在創(chuàng)建子類對象時候,如果子類的構造函數(shù)沒有顯示調(diào)用父類的構造函數(shù)且父類只定義了自己的有參構造函數(shù),則會出錯(如果父類只有有參數(shù)的構造方法,則子類必須顯示調(diào)用此帶參構造方法)。
6. 如果子類調(diào)用父類帶參數(shù)的構造方法,需要用初始化父類成員對象的方式
2.子類調(diào)用基類函數(shù) 類名::函數(shù)名(參數(shù))
JAVA
1.構造函數(shù)調(diào)用 this(參數(shù)) / super(參數(shù))
1.1同一個類中調(diào)用構造函數(shù) [必須在構造函數(shù)中第一行] this(參數(shù))
class Person {
private String name;
private int age;
private boolean sex;
public Person() {
this("jadeshu", 22, true); // 必須在第一行 不能同時調(diào)兩個不同的構造函數(shù)
}
public Person(String name,int age, boolean sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
}
1.2子類構造函數(shù)調(diào)用基類構造函數(shù) [必須在構造函數(shù)中第一行] super(參數(shù))
class Man extends Person {
public Man(String name, int age) {
//System.out.println("====");
//不能再非構造函數(shù)中使用this調(diào)用構造函數(shù)
super(name, age, true); // 必須在第一行
}
}
2.子類調(diào)用基類函數(shù) super.函數(shù)名(參數(shù))
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(); // 直接調(diào)用父類的函數(shù)[子類不存在person_test函數(shù)]
super.sub_test(); // 調(diào)用父類中的函數(shù)[子類和父類存在同名函數(shù)時使用super.XXX]
System.out.println("Man sub() called!");
}
}
C#
1.構造函數(shù)調(diào)用
1.1同一個類中構造函數(shù)調(diào)用構造函數(shù) :this(參數(shù)列表)
1.2子類構造函數(shù)調(diào)用基類構造函數(shù) :base(參數(shù)列表)
2.子類調(diào)用基類函數(shù) base.父類方法();
- ①.通過子類無參構造函數(shù)創(chuàng)建子類實例,會默認調(diào)用父類的無參構造函數(shù)
- ②.通過子類有參構造函數(shù)創(chuàng)建子類實例,也會默認調(diào)用父類的無參構造函數(shù)
- ③.在子類構造函數(shù)中通過base關鍵字指明父類構造函數(shù),當通過子類構造函數(shù)創(chuàng)建實例,會調(diào)用指明的、父類的構造函數(shù)
總結
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關內(nèi)容請查看下面相關鏈接
相關文章
數(shù)據(jù)結構之數(shù)組翻轉的實現(xiàn)方法
這篇文章主要介紹了數(shù)據(jù)結構之數(shù)組翻轉的實現(xiàn)方法的相關資料,這里用幾種實現(xiàn)方法來實現(xiàn)這樣的功能,需要的朋友可以參考下2017-10-10
vs code 配置c/c++環(huán)境的詳細教程(推薦)
這篇文章主要介紹了vs code 配置c/c++環(huán)境的詳細教程(推薦),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-11-11
Java?C++?算法題解leetcode145商品折扣后最終價格單調(diào)棧
這篇文章主要介紹了Java?C++?算法題解leetcode145商品折扣后最終價格單調(diào)棧示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-09-09
C++?Qt開發(fā)之使用QUdpSocket實現(xiàn)組播通信
Qt?是一個跨平臺C++圖形界面開發(fā)庫,利用Qt可以快速開發(fā)跨平臺窗體應用程序,本文將重點介紹如何運用QUdpSocket組件實現(xiàn)基于UDP的組播通信,感興趣的可以了解下2024-03-03
C++實現(xiàn)LeetCode(35.搜索插入位置)
這篇文章主要介紹了C++實現(xiàn)LeetCode(35.搜索插入位置),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-07-07

