super关键字

来源:9-7 Java 中的 super 的使用

慕先生7094416

2015-09-22 11:15

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

public Animal(int age){

 this.age=age;

  }

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

写回答 关注

2回答

  • 无动于衷
    2015-09-22 15:10:01
    已采纳

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


    慕先生709...

    我在下面黏贴了两个类,你看一下吧

    2015-09-22 20:06:05

    共 1 条回复 >

  • 慕先生7094416
    2015-09-22 20:04:36

      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();

       }


    无动于衷

    这里Dog的age属性不用加static啊。

    2015-09-23 09:03:49

    共 1 条回复 >

Java入门第二季 升级版

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

530099 学习 · 6086 问题

查看课程

相似问题