子類用super調用父類有參數構造函數,是否會訪問到父類的私有屬性?
public?class?Car{ ????private?int?carMoney;????//汽車租金 ????private?String?carName;???//汽車名字 ????private?int??carNumb;??????//汽車序列號 ????private?int?carryNum;????//載貨量 ????private?int?passengerNum;//載客人數 ???? public?Car(int?carNumb,String?carName,int??carMoney,int?passengerNum,int?carryNum){ this.carMoney?=?carMoney; this.carName?=?carName; this.carNumb?=?carNumb; this.carryNum?=?carryNum; this.passengerNum?=?passengerNum; } ????public?int?getCarMoney()?{ ????????return?carMoney; ????} ????public?void?setCarMoney(int?carMoney)?{ ????????this.carMoney?=?carMoney; ????} ????public?String?getCarName()?{ ????????return?carName; ????} ????public?void?setCarName(String?carName)?{ ????????this.carName?=?carName; ????} ????public?int?getCarNumb()?{ ????????return?carNumb; ????} ????public?void?setCarNumb(int?carNumb)?{ ????????this.carNumb?=?carNumb; ????} ????public?int?getCarryNum()?{ ????????return?carryNum; ????} ????public?void?setCarryNum(int?carryNum)?{ ????????this.carryNum?=?carryNum; ????} ????public?int?getPassengerNum()?{ ????????return?passengerNum; ????} ????public?void?setPassengerNum(int?passengerNum)?{ ????????this.passengerNum?=?passengerNum; ????} ? ? ????public?void?showInfo()?{ ????//?TODO?Auto-generated?method?stub ????} ? ????} ? class?Sedan?extends?Car{ public?Sedan(int?carNumb,String?carName,int??carMoney,int?passengerNum,int?carryNum){ super(carNumb,carName,carMoney,passengerNum,carryNum); } } class?Pickup?extends?Car{ public?Pickup(int?carNumb,String?carName,int??carMoney,int?passengerNum,int?carryNum){ super(carNumb,carName,carMoney,passengerNum,carryNum); } }
如上所示,不是說私有屬性無法繼承嗎?那么用super調用構造函數時初始化的是什么?子類沒有繼承父類的屬性啊??墒怯靡陨洗a卻可以調用子類的構造方法初始化父類的屬性。怎么回事?
2016-01-09
super調用的這段代碼:
這段代碼中的this,如果你是創建Sedan,那么this就是Sedan,如果是Pickup,那么this 就是Pickup。
雖然父類的字段是private,但你提供了構造方法去訪問。
2016-03-10
同學,怎樣在這里提問
2016-01-11
恩,謝謝。這兩天又學習了一下,弄清楚了,發現我其實搞復雜了,搞重復了。其實在子類當中聲明有參構造器,直接在構造器當中用this調用set方法賦值就OK了。