我有以下两节课:
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
}
}
为什么即使我们正在访问受保护的方法(即使据说在不同包的子类中也具有访问权限),第二个错误仍会发生?
最佳答案
在扩展父类的类的上下文中,跨包允许对protected
方法的访问。
在您的情况下,您正在类的实例上调用该方法,因此它不可见。
如果您在C
中有调用classType()
的实例方法或语句,那实际上会调用super#classtype()
,除非您在C
中覆盖了它。
例如。
public class C extends A {
{
// ok, instance statement
String foo = classType();
}
void foo() {
// ok, instance method
String foo = classType();
}
}
关于java - 不同包中子类访问中的 protected 方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34770673/