我正在为SJCP 6做准备,我找到了一个迄今为止从未见过的详细信息,用于从声明成员的类的子类的子类访问受保护的成员。我很清楚,当我们尝试通过继承访问受保护的成员时,只能从另一个包访问受保护的成员,但是子类的子类怎么样,我们仍然可以访问它吗?
这本书说:
一旦子类外包继承受保护的成员, 该成员(由子类继承)变得对外部任何代码都是私有的 子类,,但子类的子类除外。
我的问题是关于子类的子类,那些如何看待成员,也受到保护?他们可以访问吗?因为它说成员对子类之外的任何代码都是私有的,除了子类的子类,所以,他们如何看待它?
答案 0 :(得分:2)
如果B
是A
的子类,C
是B
的子类,那么C
也是A
的子类并且可以访问A
个protected
成员。
答案 1 :(得分:0)
在超类中声明受保护的变量,方法和构造函数只能由其他包中的子类以及子类的子类访问 或受保护成员的包裹内的任何类别'类。 我刚刚在eclipse中为这个案例创建了一个例子去试试吧.. 例如
包测试中的类MyClass有一个名为get method
的方法保护package test;
public class MyStaticClass {
protected int getmethod(){
int a=0;
return a;
}
}
同一个包中的A类扩展了MystaticClass,并且可以访问受保护的方法
package test;
public class A extends MyStaticClass{
@Override
protected int getmethod() {
// TODO Auto-generated method stub
return super.getmethod();
}
}
现在B类扩展A在另一个包中也可以访问相同的方法
package testing;
import test.A;
public class B extends A{
@Override
protected int getmethod() {
// TODO Auto-generated method stub
return super.getmethod();
}
}
现在c类在另一个包中再次扩展B也可以访问它.. 包测试;
import testing.B;
public class c extends B{
@Override
protected int getmethod() {
// TODO Auto-generated method stub
return super.getmethod();
}
}
因此可以在另一个包
中的子类的子类中访问它