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