【问题标题】:Access modifiers and hiding Java fields访问修饰符和隐藏 Java 字段
【发布时间】:2011-10-15 12:01:40
【问题描述】:

这是问题的后续:"java access modifiers and overriding"。然而,前者通常处理 Java 方法。为什么 Java 字段具有灵活性?我们可以在继承的类中根据他们的尊重来缩小或扩大可见性,而不能使用“覆盖”或“隐藏”方法。

【问题讨论】:

  • 请发布该问题的链接
  • 字段未被覆盖。它们只是隐藏起来。
  • 更新了上一个问题的标题以反映 methods() 因为隐藏字段似乎被避开了:stackoverflow.com/questions/6851612/…
  • 在访问修饰符方面似乎不是隐藏/覆盖。我只是尝试了隐藏方法,并且应用了相同的可见性规则。我仍然无法降低继承的静态方法()的可见性。字段和方法()有什么区别?

标签: java overriding field access-modifiers member-hiding


【解决方案1】:

为什么 java 字段的灵活性

您不能通过扩展将另一个类中的字段设为私有。当您在子类中创建新字段时,您只是隐藏了超类字段。

class Base {
    protected int x;
}

class Ext extends Base {
    private int x; // not the same as Base.x
}

【讨论】:

  • 当然您可以将字段设为私有。我认为您的意思是您不能通过在子类中提供私有字段来更改基类中字段的访问权限......但我建议您澄清您的答案。
【解决方案2】:

你从不覆盖字段开始 - 你总是隐藏它们。字段不是多态的......换句话说,如果你写:

Superclass x = new Subclass();
System.out.println(x.field);

并且SuperclassSubclass 都声明了一个名为field 的字段,无论如何它都会始终使用超类,因为这是编译器可以“看到”的所有内容。

就我个人而言,无论如何我都会尝试将我的变量保密......

【讨论】:

  • 这是我喜欢 .Net 中属性的众多原因之一 - 它们看起来和感觉都像字段,但仍然可以是多态的。
猜你喜欢
  • 2016-05-12
  • 2013-12-01
  • 1970-01-01
  • 2013-05-25
  • 2014-06-26
  • 2011-10-09
  • 2017-08-17
  • 1970-01-01
  • 2016-03-25
相关资源
最近更新 更多