super關(guān)鍵字
在父類(lèi)中定義了有參構(gòu)造方法,例如
public Animal(int age){
?this.age=age;
? }
?在子類(lèi)中寫(xiě)super();會(huì)報(bào)錯(cuò),要寫(xiě)成super(age); 還要把Dog類(lèi)中的age屬性加上static,為什么
在父類(lèi)中定義了有參構(gòu)造方法,例如
public Animal(int age){
?this.age=age;
? }
?在子類(lèi)中寫(xiě)super();會(huì)報(bào)錯(cuò),要寫(xiě)成super(age); 還要把Dog類(lèi)中的age屬性加上static,為什么
2015-09-22
舉報(bào)
2015-09-22
父類(lèi)Animal只有這一個(gè)有參的構(gòu)造方法:
????public Animal(int age){
?????this.age=age;
? ??}
子類(lèi)Dog的構(gòu)造方法里必須調(diào)用這個(gè)構(gòu)造方法(父類(lèi)沒(méi)有無(wú)參的構(gòu)造方法):
????public Dog(int age){
????????super(age);????????
????}
這里如果你寫(xiě)super()會(huì)報(bào)錯(cuò),super()的意思是調(diào)用父類(lèi)無(wú)參的構(gòu)造方法,super(age)的意思是調(diào)用父類(lèi)參數(shù)里是int XX的構(gòu)造方法。前面不是說(shuō)過(guò),Animal沒(méi)有無(wú)參的構(gòu)造方法,所以Dog必須去調(diào)用有參的那個(gè),必須用super(age)。
注:這里要提醒你,一個(gè)類(lèi)沒(méi)有寫(xiě)構(gòu)造方法時(shí),java會(huì)給它一個(gè)默認(rèn)的無(wú)參構(gòu)造方法,但當(dāng)你自己定義了一個(gè)有參? ? 構(gòu)造方法,這個(gè)類(lèi)就沒(méi)有了無(wú)參的構(gòu)造方法;子類(lèi)的構(gòu)造方法里都必須調(diào)用父類(lèi)的構(gòu)造方法,當(dāng)你不寫(xiě)時(shí),默認(rèn)調(diào)用父類(lèi)無(wú)參的構(gòu)造方法,你也可以用super關(guān)鍵字去自己調(diào)用父類(lèi)的構(gòu)造方法。如果父類(lèi)沒(méi)有無(wú)參構(gòu)造方法,你當(dāng)然無(wú)法去調(diào)用。
另外,Dog的age屬性要加static。沒(méi)看代碼,我不知道為什么,一般是不會(huì)這樣的。你把代碼發(fā)給我看看。
2015-09-22
? public class Animal {
? public int age=10;
? public String name;
? public void eat(){
?System.out.println("動(dòng)物具有吃的能力");
? ? }
blic Animal(int age){
?this.age=age;
? }
}
--------------------------------------------------------------
public class Dog extends Animal {
? ?public int age=20;
? ?public String name;
? ?public void eat(){
? System.out.println("狗具有吃骨頭的能力");
? ?}
? ?//無(wú)參構(gòu)造方法
? ?public Dog(){
? System.out.println("子類(lèi)的構(gòu)造方法執(zhí)行了");
? ?}
? ?public void method(){
? System.out.println(age);
? eat();
? ?}