【问题标题】:How does a java child class inherit access-protected parent fields?java子类如何继承受访问保护的父字段?
【发布时间】:2016-02-29 02:28:46
【问题描述】:

这是一个初学者的问题,但我搜索了一下,似乎找不到答案。

假设我有一个班级的人:

class Person {
  private String SSN;
  //blah blah blah...
}

然后我创建了一个 OldMan 的子类:

class OldMan inherits Person {
  //codey stuff here...
  public void setSSN(String newSSN) {
    SSN = newSSN;
  }
}

看起来我实际上无法更改 Person 的私有字段。我的印象是,当 OldMan 继承 Person 时,它会拥有属于它的私有变量的副本。看起来实际发生的事情是,当我创建一个 OldMan 对象时,它会创建 SSN 字段但是......它以某种方式属于一个 Person 对象?

我知道我可以让 SSN 受到保护,但这是最佳做法吗?这里实际发生了什么,如何创建一个父类来保护重要字段的访问,而不保护它们免受子类的影响?

【问题讨论】:

  • 由这个 super.setSSN(..) 更新的答案,现在看起来很完美。感谢您的接受。

标签: java inheritance access-protection


【解决方案1】:

你可以这样做,

class Person {
      private String SSN;
      //blah blah blah...

    public String getSSN() {
        return SSN;
    }

    public void setSSN(String sSN) {
        SSN = sSN;
    }


    }

public class OldMan  extends Person {
    //codey stuff here...
      public void setSSN(String newSSN) {
        super.setSSN(newSSN);
      }
}

【讨论】:

    【解决方案2】:

    看起来实际发生的事情是,当我创建一个 OldMan 对象时,它会创建 SSN 字段,但是......它以某种方式属于一个 Person 对象??

    是的。确切地。

    我知道我可以让 SSN 受到保护,但这是最佳做法吗?

    没错。这就是受保护的工作原理,您可以安全地使用它。

    这里实际发生了什么,如何创建一个父类,该父类将保护重要字段的访问,而不保护它们免受子类的影响?

    正如你刚才所说,让他们保护,现在他们只能由孩子和包装中的人访问。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-13
      • 2011-05-24
      • 2019-05-16
      • 2015-05-09
      • 2013-05-27
      • 2017-09-26
      相关资源
      最近更新 更多