为什么子类成员不受保护?

时间:2018-06-28 08:58:34

标签: java inheritance

如果MyTest不是Val的父类,为什么可以访问v.v?

public class MyTest 
{
    public static void main (String args [])
    {
        ValX v = new ValX ();
        System.out.println ("A: " + v.v);  // is working, why?
    }
}


public class ValX extends Val
{
}


public class Val 
{
    protected float v = 11;
}

编辑

我了解了包装内受保护物品的可见性。那就是原因。谢谢!

有没有一种方法可以使v仅对父类可见,而无需将其移动到另一个包中?

1 个答案:

答案 0 :(得分:2)

在Java中,可见性级别形成了一个完全有序的包容链。

private成员只能在当前类中看到。

package-private成员只能从当前包(当前类是其中的一部分)中看到。

protected成员只能从子类或当前软件包中看到,从而涵盖了package-private可以看到的所有内容。

随处可见public成员。

由于您的MyTest类与Val位于同一包中,因此protected可见性将授予访问权限。