Java-OOP:为什么Java将受保护的方法隐藏在子类中的超类实例中?

时间:2015-02-07 23:25:23

标签: java oop

确定。我有这两个类:

class A{

    private static A myA = new A();

    protected void a()
    {
         //some stuff
    }
    protected void test(){
        myA.a(); //Hello I see you
    }
}

class B extends A{

    private static A myA = new A();

    public void test()
    {
        myA.a(); //Eclipse error: Oopse a() is not visible.
    }
}

我已经定义了A类和一个B类。 在内部我们都知道,我可以创建一个实例,并可以访问包括受保护方法a()在内的所有内容。

B是A的子类,因此可以访问受保护的成员。 但是如果我在B中创建A的实例,然后尝试从该实例访问方法a(),则eclipse会抱怨受保护的方法不可见。

为什么?是否A类和B类被视为受保护成员的相同类型?

现在,如果我将班级b改为:

 class B extends A{

    private static B myA = new B();/*I kept the name as myA to show the point*/

    public void test()
    {
        myA.a(); //Hello, I see you now
    }
}

我在内部B中将myA的类型更改为B.现在B可以从myA实例访问受保护的方法a()。虽然我希望B能够访问A实例的所有受保护方法,但不要将其视为违反封装。

0 个答案:

没有答案