我正在为SJCP 6做准备,我发现到目前为止我还没有看到从声明成员的子类的子类中访问受保护成员的详细信息。我很清楚,只有当我们试图通过继承访问受保护成员时,才能从另一个包中访问受保护的成员,但是子类的子类如何,我们还能访问它吗?
书上说:
一旦包外子类继承了受保护的成员,该成员(由子类继承)成为子类以外的任何代码的私有成员,子类子类的子类除外。。
我的问题是关于子类的子类,这些子类是如何将成员视为受保护的?他们能进入吗?因为它说成员对子类之外的任何代码都是私有的,子类的子类除外,那么他们是如何看待它的呢?
发布于 2014-11-07 15:22:31
如果B是A的子类,而C是B的子类,那么C也是A的子类,并且可以访问A的protected成员。
发布于 2014-11-07 15:28:10
在超类中声明受保护的变量、方法和构造函数只能由其他包中的子类以及子类的子类或受保护成员类的包中的任何类访问。我刚在eclipse中为这个例子创建了一个例子,去试一试。为例
包测试中的MyClass类有一个名为get方法的保护方法
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();
}
}现在,在另一个包中再次扩展B的c类也可以访问它。包装试验;
import testing.B;
public class c extends B{
@Override
protected int getmethod() {
// TODO Auto-generated method stub
return super.getmethod();
}
}因此,它可以在另一个包的子类子类中访问。
https://stackoverflow.com/questions/26804415
复制相似问题