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