我有两节课:
A类
package A;
public class A {
protected String classType(){
return "s1";
}
}
C类
package B;
import A.A;
public class C extends A{
public static void main(String[] args){
C c=new C();
c.classType();//no error
A a=new C();
a.classType();//error
}
}
为什么在第二个中出现错误,即使我们正在访问被称为在不同包中的子类中具有访问权限的受保护方法?
答案 0 :(得分:3)
在类扩展父类的上下文中的包之间授予对protected
方法的访问权限。
在您的情况下,您正在类的实例上调用该方法,因此它不可见。
如果你在C
调用classType()
中有一个实例方法或语句:除非你在super#classtype()
中覆盖它,否则它会虚拟调用C
。
E.g。
public class C extends A {
{
// ok, instance statement
String foo = classType();
}
void foo() {
// ok, instance method
String foo = classType();
}
}