我看过各种关于受保护和包私有修饰符之间差异的文章。我发现这两个帖子之间存在矛盾的一件事
-
在这个接受的答案中说
protected 修饰符指定该成员只能在其自己的包中访问(与 package-private 一样),此外,它的类在另一个包中的子类也可以访问。
-
在这个接受的答案中说
要满足受保护级别的访问,必须满足两个条件:
- 这些类必须在同一个包中。
- 必须有继承关系。
他们不矛盾吗?根据我对其他文章的理解,第一篇文章给出了protected == package-private + subclass in other package的正确答案。
如果这个陈述是正确的,那么为什么这个代码在第 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();
}
}
请澄清上述代码失败的原因。那将非常有用。谢谢