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