關(guān)于JAVA構(gòu)造器的使用問題?
問題描述
class SuperClass { private int n; SuperClass(){ System.out.println('SuperClass()'); } SuperClass(int n) { System.out.println('SuperClass(int n)'); this.n = n; }}class SubClass extends SuperClass{ private int n; SubClass(){ super(300); System.out.println('SubClass'); } public SubClass(int n){ System.out.println('SubClass(int n):'+n); this.n = n; }}public class TestSuperSub{ public static void main (String args[]){ SubClass sc = new SubClass(); SubClass sc2 = new SubClass(200); }}
請(qǐng)問為什么說:1.子類不能繼承父類的構(gòu)造器(構(gòu)造方法或者構(gòu)造函數(shù)),但是父類的構(gòu)造器帶有參數(shù)的,則必須在子類的構(gòu)造器中顯式地通過super關(guān)鍵字調(diào)用父類的構(gòu)造器并配以適當(dāng)?shù)膮?shù)列表。該案例中,(1)子類SubClass已經(jīng)繼承了父類SuperClass,里面的構(gòu)造器不是已經(jīng)發(fā)生繼承了?么?(2)該處子類SubClass的SubClass()方法是重寫的還是繼承的哈?這里應(yīng)該是無常的構(gòu)造器哈,怎么也有super(300)啊?跪求指教哈!!
問題解答
回答1:子類不能繼承父類的構(gòu)造器。子類在實(shí)例化之前會(huì)先實(shí)例化父類。
SubClass()就是默認(rèn)構(gòu)造器,不是重寫也不是繼承。super(300)是你自己寫的,SubClass(int n)里就默認(rèn)調(diào)用了super()。
相關(guān)文章:
1. HTML5不支持frameset一般怎么解決?2. javascript - Vue的計(jì)算屬性底層依賴原理是怎么樣?3. javascript - jquery怎么給select option一個(gè)點(diǎn)擊時(shí)觸發(fā)的事件,如圖 如果選擇自定義觸發(fā)一個(gè)時(shí)間?4. 網(wǎng)頁爬蟲 - python爬蟲用BeautifulSoup爬取<s>元素并寫入字典,但某些div下沒有這一元素,導(dǎo)致自動(dòng)寫入下一條,如何解決?5. 百度地圖api - Android百度地圖SDK,MapView上層按鈕可見卻不可觸,怎么解決?6. mysql 獲取時(shí)間函數(shù)unix_timestamp 問題?7. html5 - canvas中的mousedrag事件,為什么鼠標(biāo)拖出canvas,然后再次移入canvas,drag事件還觸發(fā)8. 新入手layuiadmin,部署到tp中。想用php自已寫一個(gè)后臺(tái)管理系統(tǒng)。9. javascript - react 組件 使用super()報(bào)錯(cuò)10. javascript - es6擴(kuò)展運(yùn)算符...的問題
