为什么在其他包类中可以访问java包中的类的受保护成员?

时间:2013-08-11 20:30:30

标签: java package

//first package is
package package1;
public class ClassA
{
    public void displayA()
    {
    System.out.println("Class A");
    }
}
//second package is
package package3;
public class ClassC
{
protected int m=10;
public void displayC()
    {
    System.out.println("Class C");
    System.out.println("m="+m);
    }
}
//importing the packages
import package1.ClassA;
import package3.*;
class PackageTest3
{
public static void main(String args[])
{
    ClassA objA=new ClassA();
        ClassC objC=new ClassC();
    objA.displayA();
    objC.displayC();
}
}
Output:
Class A
Class C
m=10

我的问题是在上面的程序中,即使package1中classA中的成员(int m)受到保护,它仍然可以在PackageTest3类中访问。我没有得到这个。任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:3)

该字段被声明为受保护,这将限制对从ClassC派生的类或在同一包中的字段的访问。 主要方法是访问一个公共方法,该方法将受保护字段的值打印到控制台, 直接访问受保护字段。

protected访问修饰符将阻止访问该字段,如以下示例所示:

public static void main(String args[])
{
    ClassA objA = new ClassA();
    ClassC objC = new ClassC();
    objA.displayA(); //fine
    objC.displayC(); //fine
    System.out.println(objC.m); //Not Allowed, prevented by protected access
}