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