1. 程式人生 > >Java類的組合與繼承 小問題分析(建構函式引數的傳遞方法 、資料隱藏的處理: 對比C++)

Java類的組合與繼承 小問題分析(建構函式引數的傳遞方法 、資料隱藏的處理: 對比C++)

一、類的組合:

    1、初始化問題(建構函式的引數傳遞方法):

      在C++中,通常只要物件中不含有指標類資料的話,物件與物件之間是可以相互賦值且不會出錯的,因此組合出來的類完全可以將傳遞過來的物件引數直接賦值給對應資料成員;

      而在java中,物件的定義是類似與C++中的指標的,所以直接在物件之間相互賦值有時是會出現錯誤的(會使所有物件均指向同一個儲存區域,這時修改任意其中一個物件,都會造成其他物件的值也發生變化),因此,在建構函式中,我們一般不將傳遞過來的物件引數直接賦值給當前物件的資料成員,而是先為當前類指定一塊儲存區域,然後將物件引數的值通過基本資料型別的形式賦值到上述儲存區域上

。這樣就保證了我們在修改物件引數指向的區域內容時不會再影響已經確定了值的當前物件。

二、繼承:(:、extends)

1、初始化問題:

    在C++中,對派生類初始化時,有如下順序:父類--派生類中物件成員--派生類中基本資料型別,且父類的初始化只能通過初始化列表來實現。

   在講java之前,我們首先知道,java中對父類資料成員的初始化是通過    super(父類建構函式的引數列表)  來實現的。

   然後,java中派生類的初始化也遵循上述初始化順序(且通過語法規則強制保證),即java中若super函式不是派生類建構函式的第一條語句的話,編譯無法通過。

2、資料隱藏的處理方法:

    在C++中如果出現派生類將父類的成員隱藏,我們可以通過Father::(被隱藏的成員名)來呼叫被隱藏的成員。

    同樣,在java,我們可以藉助super.(被隱藏的引數名)來表示該量為父類中的成員。(或者說使用當前派生類時用this.+成員名,this可以省略;使用其父類中成員時,用super . +成員名   來實現)。