java中為什么private修飾的類不能繼承父類
java中為什么private修飾的類不能繼承父類
子類繼承父類,子類擁有了父類的所有屬性和方法。程序驗證,父類的私有屬性和方法子類是無法直接訪問的。
當然私有屬性可以通過public修飾的getter和setter方法訪問到的,但是私有方法不行。
假設:子類不能夠繼承父類的私有屬性和方法那么:分析內(nèi)存后,會發(fā)現(xiàn),當一個子類被實例化的時候,默認會先調(diào)用父類的構(gòu)造方法對父類進行初始化,即在內(nèi)存中創(chuàng)建一個父類對象,然后再父類對象的外部放上子類獨有的屬性,兩者合起來成為一個子類的對象。所以:子類繼承了父類的所有屬性和方法或子類擁有父類的所有屬性和方法是對的,只不過父類的私有屬性和方法,子類是無法直接訪問到的。即只是擁有,但是無法使用。
c++ 子類為什么不繼承父類構(gòu)造函數(shù)
構(gòu)造是不會繼承的,這句話的意思是:子類對象不能 (用點的方式) 訪問父類的構(gòu)造。但不代表子類實例化時父類構(gòu)造不會運行。
一句話,父類不能只寫有參構(gòu)造(無參被屏蔽了),若一定只寫有參構(gòu)造,那就必須 子類要顯式調(diào)用父類的有參構(gòu)造。百科
否則就會報錯。因為,除了上述情況外,子類會無條件的調(diào)用父類無參構(gòu)造,若父類沒有無參構(gòu)造,所以就會報錯。
java父類的構(gòu)造方法為什么不能被子類繼承
子類=父類﹢新增的變量﹢新增的方法。對象語言的構(gòu)造器作用在于對類創(chuàng)建實例對象時完成對象的初始化工作(為變量申請內(nèi)存空間等)因此,子類的構(gòu)造器除了承擔著初始化子類的新增變量和方法,還要初始化父類自身新增加的變量和方法。
一般來說,如果在子類的構(gòu)造器中沒有使用super()調(diào)用父類相應的構(gòu)造器,子類的構(gòu)造器會自動調(diào)用父類默認的,也就是不帶參數(shù)的構(gòu)造器來初始化父類的東西。
而Java類的默認構(gòu)造器,當你沒有為你寫的類建造構(gòu)造器的時候,Java會自動幫你創(chuàng)建這個默認構(gòu)造器,但是當你自己編寫了構(gòu)造器后,你自己編寫構(gòu)造器將會覆蓋掉默認的構(gòu)造器,就是說默認的構(gòu)造器不存在。那么這個時候,你在繼承的子類里面沒有顯示添加super()函數(shù)調(diào)用你在父類里編寫的父類構(gòu)造器,子類的構(gòu)造器將不能自動找到父類的構(gòu)造器。找不到父類的構(gòu)造器意味著什么?意味著你的子類實例化的時候找不到父類的構(gòu)造器來初始化父類的東西,不能完成類實例對象的初始化工作,你說你的子類能不出現(xiàn)錯誤?! 所以,在子類的構(gòu)造器中需不需要添加super()調(diào)用父類相應的構(gòu)造器,只需要考慮子類的構(gòu)造器才初始化的時候能不能完成所有變量和方法的初始化就可以了。另外,根據(jù)自己初始化工作的需要使用super()調(diào)用相應的父類構(gòu)造器來初始化也是有必要的。
所以你所說的子類不能繼承父類構(gòu)造器,這說明你沒有顯式的調(diào)用seper(),而且父類構(gòu)造器被你的子類覆蓋或調(diào)用的父類中沒有無參構(gòu)造器所引起的。
c++中子類不能繼承父類的一些函數(shù)這個不能繼承修飾的到底是什么
cla
Java中子類不能繼承父類的構(gòu)造方法應如何理解
首先,你這句話沒有說清楚構(gòu)造函數(shù)(一般我們講的“函數(shù)”就是“方法”)是默認的無參數(shù),還是自己手動寫的有參數(shù)的。
一個類可以定義多個 構(gòu)造函數(shù),如果在定義類時你手動寫了一個有參數(shù)的構(gòu)造函數(shù),那么當前類只有這一個有參數(shù)的構(gòu)造函數(shù)。
如果在定義類時沒有定義構(gòu)造函數(shù),則?編譯系統(tǒng)會自動插入一個無參數(shù)的默認構(gòu)造函數(shù),這個構(gòu)造函數(shù)不執(zhí)行任何代碼,且不會顯示出來。
Java中,子類只能繼承父類的用protected 和 public修飾的構(gòu)造函數(shù)。其中,無參構(gòu)造函數(shù)只能是 public。