我有以下两个文件:
水果.java:
package superClass;
public class Fruit {
protected static void printName() {
System.out.println("My name is Khan");
}
}
苹果.java:
package food;
import superClass.*;
public class Apple {
public static void main(String[] args) {
int i, j;
for(i = 0; i < 5; i++) {
for(j = 0; j < i; j++) {
System.out.print("*");
}
System.out.println();
}
printName(); // Call inherited member - NO ERROR, expected
Fruit f = new Fruit();
f.printName(); // Call instantiated member - ERROR, expected
}
}
正如预期的那样,我无法从 Apple 类中访问受保护的方法 printName,因为它们位于不同的包中。我收到以下错误:
printName() has protected access in superClass.Fruit
完全正确。但是,如果我按如下方式从类 superClass 继承,我不会收到任何错误!
package food;
import superClass.*;
public class Apple extends Fruit {
public static void main(String[] args) {
int i, j;
for(i = 0; i < 5; i++) {
for(j = 0; j < i; j++) {
System.out.print("*");
}
System.out.println();
}
printName(); // Call inherited member - NO ERROR, expected
Fruit f = new Fruit();
f.printName(); // Call instantiated member - NO ERROR, WHAT????
}
}
为什么它允许我通过引用访问不同包中另一个类的受保护成员?这应该是非法访问,不是吗?
我很困惑!有人请帮忙。
该代码是使用 Java 1.6.0_18 编译的。