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

Why is a field with no modifier visible in a subclass?

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

我的超级class:

public class SuperClass {

String s = "superString";

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

我的子class:

public class Test extends SuperClass{

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

我没有从 eclipse 收到错误消息,程序打印出:superString...

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

没有修饰符表示字段或方法的范围是"package only".

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

When no modifier is present then default access is applied, think of default access as package access, a class with default access can be seen only by classes within the same package

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

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