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
父类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。没看代码,我不知道为什么,一般是不会这样的。你把代码发给我看看。
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();
}
举报