有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java保护从子类的子类访问成员

我正在为SJCP6做准备,我发现了一个到目前为止还没有看到的细节,用于从声明成员的类的子类访问受保护的成员。我很清楚,当我们试图通过继承访问受保护的成员时,只能从另一个包访问它,但对于该子类的子类,我们仍然可以访问它吗

书上说:

Once the subclass-outside-the-package inherits the protected member, that member (as inherited by the subclass) becomes private to any code outside the subclass, with the exception of subclasses of the subclass.

我的问题是关于子类的子类,这些子类如何看待成员,也被保护?他们能进入吗?因为它说成员对于子类之外的任何代码都是私有的,子类的子类除外,所以,他们是如何看待它的


共 (2) 个答案

  1. # 1 楼答案

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

  2. # 2 楼答案

    在超类中声明受保护的变量、方法和构造函数只能由其他包中的子类以及子类的子类访问 或受保护成员类包中的任何类。 我刚刚在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();
            }
        }
    

    现在,扩展另一个包中的A的类B也可以访问相同的方法

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

    因此,它可以在另一个包的子类的子类中访问