【问题标题】:Extend my class properly [duplicate]正确扩展我的课程[重复]
【发布时间】:2016-04-15 03:58:31
【问题描述】:

我正在使用 Animal 类。它的构造函数将名称作为参数。

public class Animal {
    String name;
    public Animal(String name) {
        this.name = name;
    }

    public static void main(String[] args) {
         Animal cow = new Animal("Cow");
         Humain pierre = new Humain("Pierre", true);
    }
}

还有一个从 Animal 扩展而来的 Human 类。它的构造函数以名称和布尔值作为参数。

public class Humain extends Animal{
    boolean isIntelligent;

    public Humain(String name, boolean isIntelligent) {
        this.name = name;
        this.isIntelligent = isIntelligent;
    }

}

为什么我在 IDE (netbean) 中收到此错误消息:“Animal 类中的构造函数 Animal 不能应用于给定类型”?我觉得我缺少一些关于类扩展和构造函数的东西。

【问题讨论】:

  • 你需要在Humain的构造函数中调用super(name)(你可以代替this.name = name这样做,因为它会产生相同的效果)。
  • 当您不显式调用超级构造函数时,将隐式调用无参数超级构造函数 (super();)。由于基类中没有没有参数的构造函数,因此会出现编译错误。

标签: java constructor extends


【解决方案1】:

你需要在类 Human 的构造函数中调用 super。代码:

public class Humain extends Animal{
    boolean isIntelligent;

    public Humain(String name, boolean isIntelligent) {
        super(name);

        this.isIntelligent = isIntelligent;
    }

}

【讨论】:

    【解决方案2】:

    试试这个:

    public class Humain extends Animal{
      boolean isIntelligent;
    
      public Humain(String name, boolean isIntelligent) {
          super(name);
          this.isIntelligent = isIntelligent;
      }
    }
    

    【讨论】:

    • 无需重新分配this.name
    • 这是错误的,你不需要这样做:this.name = name;
    • @bercik 没有错(因为它实际上不会改变任何东西),只是没有必要。
    • 哦,是的,我会编辑答案...
    • 但是你为什么要这样做呢?对我来说,如果某事被允许并不意味着它没有错。
    【解决方案3】:

    当你有带参数的构造函数时,在B中制作带参数的构造函数时,需要在super()中传入A的参数

    示例:

    class A {
        public A(int x) {   }
      }
    
      class B extends A {
        public B(int x ) 
        {
           super(x); // need to specify the parameter for class A
           //... 
        }
      }
    

    在你的情况下应该是:

    public Humain(String name, boolean isIntelligent) {
          super(name);
    
          this.isIntelligent = isIntelligent;
      }
    

    【讨论】:

      猜你喜欢
      • 2022-01-26
      • 2012-03-12
      • 1970-01-01
      • 2014-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      相关资源
      最近更新 更多