Java中的访问修饰符 - 一个回顾

时间:2015-04-21 16:29:16

标签: java inheritance protected access-modifiers

我正在试图了解这些修饰语的真正含义,因为我认为对于他们做什么或不做什么有很多困惑。 所以,这就是我所知道的:

使用了四个访问修饰符:

publicprotectedprivateno modifier(package private)

1)关于其定义中的成员:无论访问修饰符是什么,类都可以访问它们中的每一个。

2)关于另一个类,它不会继承或共享相同的包:它只能访问标记为public的成员。

3)相对于同一个包中的另一个类,但它不继承自:它只能访问标记为publicprotected且拥有no modifier(package private)的成员。

现在是棘手的部分(至少对我而言......)

4)如果A类继承自另一个B类,但不共享同一个包,则A具有B中声明为publicprotected的所有成员(字段和方法)。 但就B的实例而言,A只能访问public个成员(不是protectedno modifier(package private)成员,我是否正确?)。

5)如果A类继承自另一个B类,并且它们共享相同的包,则A具有声明为publicprotectedno modifiers(package private)的所有成员(字段和方法)在B(我是对的吗?)。 由于A和B位于同一个包中,因此A可以访问任何B实例的protectedno modifier(package private)成员(当然也包括public个。)

此外,由于A是-a B成员将另一个类(例如,C)试图访问A的成员(当然其中一个实例,但让它保持简单)能够到达? ? 我知道C肯定能够访问public个成员,但是案例4和5中的protectedno modifier(package private)成员呢? (我将private放在一边,因为这些成员只能在定义类中访问)

拜托,帮助!

这是在访问/继承方面发生的事情:

package one;

//class with all kind of modifiers
public class A {

    protected void methodProtected(){}

    public void methodPublic(){}

    void methodDefault(){}

    private void methodPrivate(){}

}

//same package,no inheritance
package one;

public class B {

    {
        new A().methodDefault();
        new A().methodProtected();
        new A().methodPublic();
    }

}

//same package,inheritance
package one;

public class C extends A {

    {
        new A().methodDefault();
        new A().methodProtected();
        new A().methodPublic();
        methodDefault();
        methodProtected();
        methodPublic();
    }

}

//different package,inheritance
package two;
import one.A;

public class D extends A{

    {
        new A().methodPublic();
        A a = new A();
        //compiler error: can't access protected members
        //a.methodProtected();
        methodPublic();
        methodProtected();
    }

}

//different package,no inheritance
package two;
import one.*;

    public class E {

        {
            new A().methodPublic();

        }
    }

现在,我想知道当E试图访问B,C或D时会发生什么, 如果E继承自A或其中一个类,或者是在同一个包中怎么办?多么糟糕......

0 个答案:

没有答案