为什么没有修饰符的字段在子类中可见?
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
为什么没有修饰符的字段在子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