从子类的子类对成员的受保护访问

时间:2014-11-07 15:21:16

标签: java protected

我正在为SJCP 6做准备,我找到了一个迄今为止从未见过的详细信息,用于从声明成员的类的子类的子类访问受保护的成员。我很清楚,当我们尝试通过继承访问受保护的成员时,只能从另一个包访问受保护的成员,但是子类的子类怎么样,我们仍然可以访问它吗?

这本书说:

  

一旦子类外包继承受保护的成员,   该成员(由子类继承)变得对外部任何代码都是私有的   子类,,但子类的子类除外。

我的问题是关于子类的子类,那些如何看待成员,也受到保护?他们可以访问吗?因为它说成员对子类之外的任何代码都是私有的,除了子类的子类,所以,他们如何看待它?

2 个答案:

答案 0 :(得分:2)

如果BA的子类,CB的子类,那么C也是A的子类并且可以访问Aprotected成员。

答案 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();
    }
}

因此可以在另一个包

中的子类的子类中访问它