无法从子 class 访问受保护的方法
Can't access protected method from child class
所以,我们有
public abstract class A{
protected abstract String f();
}
public class B extends A{
protected String f(){...}
}
public class C extends A{
protected String f(){
A b = (A) Class.forName("B", true, getClass().getClassLoader()).newInstance();
return b.f();
}
这不允许我访问 b.f()
,说 B.f()
在受保护范围内,但是 f
受 A
保护,并且由于 C
扩展了 A
,它也应该可以访问 f()
.
否,因为编译器不知道 b
是否是 B
、C
或其他外部 classes.
的实例
假设有一个 class D
使得 D extends A
在另一个包中。如果 b
是 D
的实例(编译器不知道) 如果访问是 protected
(不能被 [=23= 访问), b.f()
应该被禁止]es 在其他包中)。
protected 修饰符指定该成员只能在其自己的包内访问(与 package-private 一样),此外,它的 class 在另一个包中的子class .
如果您想访问 B.f(),您应该将 C class 定义在与 B 相同的包中。
所以,我们有
public abstract class A{
protected abstract String f();
}
public class B extends A{
protected String f(){...}
}
public class C extends A{
protected String f(){
A b = (A) Class.forName("B", true, getClass().getClassLoader()).newInstance();
return b.f();
}
这不允许我访问 b.f()
,说 B.f()
在受保护范围内,但是 f
受 A
保护,并且由于 C
扩展了 A
,它也应该可以访问 f()
.
否,因为编译器不知道 b
是否是 B
、C
或其他外部 classes.
假设有一个 class D
使得 D extends A
在另一个包中。如果 b
是 D
的实例(编译器不知道) 如果访问是 protected
(不能被 [=23= 访问), b.f()
应该被禁止]es 在其他包中)。
protected 修饰符指定该成员只能在其自己的包内访问(与 package-private 一样),此外,它的 class 在另一个包中的子class .
如果您想访问 B.f(),您应该将 C class 定义在与 B 相同的包中。