【问题标题】:Why are variables not inheriting in subclass in Java?为什么Java的子类中没有继承变量?
【发布时间】:2018-01-18 05:03:04
【问题描述】:

我有两节课。一个 Person 类和一个 Patient 类,其中 Person 是父类,Patient 是子类。我有变量firstNamelastName,变量name 是Person 类中两者的组合,如下所示:

public Person (String initialFirstName, String initialLastName){
    firstName = initialFirstName;
    lastName = initialLastName;
    name = firstName + " " + lastName;
}

但是当我希望 Patient 类继承这些变量时,它不会。

public Patient (String initialFirstName, String initialLastName){
    super(initialFirstName);
    super(initialLastName);
}

我不确定为什么它不起作用。我唯一能想到的是继承变量时不能有两个超级,但我不确定。

【问题讨论】:

  • 应该是super(initialFirstName, initialLastName);不是两个超
  • 这不是非继承问题。您正在调用一个不存在的基类构造函数。
  • 听起来像是可见性问题。如果您的变量被声明为私有,则 Patient 类无法访问这些变量。可以肯定的是,我们需要更多的课程。 “它不会继承这些变量”到底是什么意思?此外,您还有语法错误。超级构造函数只能调用一次,而不能像您的代码那样调用两次。
  • @ajheilman 请阅读此meta.stackexchange.com/a/5235

标签: java inheritance


【解决方案1】:

superclass 构造函数的调用必须是 子类构造函数。

无论如何,下面的代码行应该会给你编译错误

public Patient (String initialFirstName, String initialLastName){
    super(initialFirstName);
    super(initialLastName);
}

应该是

public Patient (String initialFirstName, String initialLastName){
    super(initialFirstName, initialLastName);
}

另外,请注意,

使用super(参数列表),调用具有匹配参数列表的超类构造函数

所以,引用你的代码super(initialFirstName); 会给你编译错误,因为在超类中没有定义匹配的参数列表构造函数。

【讨论】:

    【解决方案2】:

    试试这个

    public Patient (String initialFirstName, String initialLastName){
       super(initialFirstName,initialLastName);
    }
    

    而不是

    public Patient (String initialFirstName, String initialLastName){
        super(initialFirstName);
        super(initialLastName);
    }
    

    【讨论】:

      【解决方案3】:

      你可以用这个

      public Patient (String initialFirstName, String initialLastName){
         super(initialFirstName,initialLastName);
      }
      

      或者,如果这两个字段是受保护的或公共的,并且您不想由构造函数设置,那么您可以试试这个

      public Patient (String initialFirstName, String initialLastName){
         super.firstName = initialFirstName;
         super.lastName = initialLastName;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-03-28
        • 2016-07-30
        • 2016-07-28
        • 1970-01-01
        • 2013-02-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多