f.k*_*sis 5 java inheritance classloader
所以,我们有
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();
}
Run Code Online (Sandbox Code Playgroud)
这不允许我访问b.f(),说它B.f()在受保护的范围内,但f受到保护A,并且自C扩展以来A,它也应该可以访问f().
protected 修饰符指定该成员只能在其自己的包内访问(与 package-private 一样),此外,还可以由另一个包中的该类的子类访问。
如果要访问 Bf(),则应该将 C 类定义在与 B 相同的包中。
| 归档时间: |
|
| 查看次数: |
1523 次 |
| 最近记录: |