【发布时间】:2013-08-09 21:21:38
【问题描述】:
我在两个不同的包中有以下两个类。我的实例方法的访问修饰符受到保护,这意味着相同或不同包中的任何子类都可以访问它吗?但是,在 Eclipse 中,我在第 17 行的子类 Cat 上看到以下消息
The method testInstanceMethod() from the type Animal is not visible
我的超类和子类代码如下。
package inheritance;
public class Animal {
public static void testClassMethod() {
System.out.println("The class" + " method in Animal.");
}
protected void testInstanceMethod() {
System.out.println("The instance " + " method in Animal.");
}
}
package testpackage;
import inheritance.Animal;
public class Cat extends Animal{
public static void testClassMethod() {
System.out.println("The class method" + " in Cat.");
}
public void testInstanceMethod() {
System.out.println("The instance method" + " in Cat.");
}
public static void main(String[] args) {
Cat myCat = new Cat();
Animal myAnimal = myCat;
myAnimal.testClassMethod();
myAnimal.testInstanceMethod();
}
}
【问题讨论】:
-
访问修饰符的范围在this table 中清晰可见。这种情况下的问题是您试图在
Animal上调用testInstanceMethod。假设您将方法命名为meow()(在名为Cat的类中使用这样的方法是有意义的)。现在很清楚,让您在任何Animal上调用meow()是没有意义的。Animal可能是Dog! :-)
标签: java inheritance protected access-modifiers