为了账号安全,请及时绑定邮箱和手机立即绑定

super关键字

在父类中定义了有参构造方法,例如

public Animal(int age){

 this.age=age;

  }

 在子类中写super();会报错,要写成super(age); 还要把Dog类中的age属性加上static,为什么

正在回答

2 回答

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


0 回复 有任何疑惑可以回复我~
#1

慕先生7094416 提问者

我在下面黏贴了两个类,你看一下吧
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();

   }


0 回复 有任何疑惑可以回复我~
#1

无动于衷

这里Dog的age属性不用加static啊。
2015-09-23 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Java入门第二季 升级版
  • 参与学习       530632    人
  • 解答问题       6091    个

课程升级!以终为始告别枯燥,在开发和重构中体会Java面向对象编程的奥妙

进入课程

super关键字

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信