问题是关于受保护的访问。此代码有什么问题:
package pkgA;
public class Foo {
protected int b = 6;
}
package pkgB;
import pkgA.*;
class Food extends Foo {
void met(){
System.out.println(new Food().b);
}
};
public class Baz {
public static void main(String[] args) {
Food fd = new Food();
fd.met(); // *line 1*
System.out.println(" " + fd.b); // *line 2*; error : b has protected access in Foo
}
}
为什么第1行好,但第2行不呢?
您正在尝试从Baz
访问b
,这是不可能的,因为b
是protected
。只有从Foo
派生的类才能访问b
。
您可以访问met()
,因为它没有访问修饰符,因此可以在同一软件包中的类中使用(Baz
和Food
都在同一软件包中(。
这是基本的继承。更多信息在这里:https://docs.oracle.com/javase/tutorial/java/javaoo/accesscontrol.html。