假设我们已经给出了两个类:
package inheritance1;
public class Foo1 {
protected void sayWhoYouAre() {
System.out.println("I am Foo1");
}
}
和
package inheritance2;
import inheritance1.Foo1;
public class Foo2 extends Foo1 {
public Foo2() {
// why does this not work?
// new Foo1().sayWhoYouAre();
// ---> Error: "The method sayWhoYouAre() from the type Foo1 is not
// visible"
}
@Override
protected void sayWhoYouAre() {
System.out.println("I am Foo2");
}
public static void main(String[] args) {
// why does this not work?
// new Foo1().sayWhoYouAre();
// ---> Error: "The method sayWhoYouAre() from the type Foo1 is not
// visible"
}
}
为什么sayWhoYourAre()
- 方法在类定义中可见,所以我可以覆盖它(@Override
),但当我尝试通过new Foo1().sayWhoYouAre()
调用它时编译器说,这个方法不可见?
感谢您的帮助! :)
答案 0 :(得分:0)
protected
表示该方法在以下位置可见:
Foo2
然而,main方法是静态的,因此不属于类的对象范围,这意味着它不在继承层次结构中。因此,sayWhoYouAre
上的Foo1
不可见。
另请参阅JLS