【问题标题】:Why is a field with no modifier visible in a subclass? [duplicate]为什么没有修饰符的字段在子类中可见? [复制]
【发布时间】:2015-03-12 02:09:52
【问题描述】:

为什么没有修饰符的字段在子类中可见?

我的超级班:

public class SuperClass {

String s = "superString";

    public void method(){
       System.out.println("Super");
    }
 }

我的子类:

public class Test extends SuperClass{

public static void main(String args[]){
    Test t = new Test();
    System.out.println(t.s);
  }
}

我没有收到来自 Eclipse 的错误消息,程序打印出:superString...

但它不应该因为没有修饰符字段仅在类和包中可见,但在子类中不可见,或者我误解了什么?谢谢

【问题讨论】:

  • 你的课程在什么包里?
  • 好的,答案是正确的,我认为该声明更强,它在子类中不可见
  • 但我认为它不是重复的,我知道那个页面......我实际上从未想过它,因为我通常使用私人或公共
  • this chart 中清楚地描述了默认可见性与其他访问级别之间的关系。希望有帮助! :)

标签: java subclass visibility access-modifiers


【解决方案1】:

如果没有修饰符,则应用默认访问,请考虑 默认访问作为包访问,具有默认访问的类可以 只有同一个包中的类才能看到

您的课程Test 必须与您的SuperClass 在同一个包中,这就是它可见的原因。

来源:http://www.datadisk.co.uk/html_docs/java/access_control.htm

【讨论】:

    【解决方案2】:

    具有 no 修饰符意味着字段或方法的范围是“仅包”。

    因此,您的子类必须与超类在同一个包中,才能访问超类中没有修饰符的字段。

    【讨论】:

      猜你喜欢
      • 2011-07-15
      • 2015-05-08
      • 2012-01-30
      • 2011-08-27
      • 2014-05-09
      • 1970-01-01
      • 1970-01-01
      • 2014-06-26
      • 1970-01-01
      相关资源
      最近更新 更多