首页 > 解决方案 > 为什么子类成员不受保护?

问题描述

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

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 仅对父类可见而不将其移动到另一个包?

标签: javainheritance

解决方案


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

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

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

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

public从任何地方都可以看到一个成员。

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


推荐阅读