我可以在java中访问类外的受保护字段

时间:2014-09-24 00:13:07

标签: java polymorphism protected

好的,所以我认为保护字段的重点是只有子类和具有受保护字段的类才能访问该变量。制作子类或超类的对象不应授予对这些字段的访问权限。如果我是正确的,那么这样的代码如何才能正确编译?

//superclass
public class SuperClass{
    protected int x = 5;

}

//main class with main method
public class MainClass{        
     public static void main(String[] args) {

         SuperClass a = new SuperClass();

         a.x = 8;       

         System.out.println(a.a);


      }
}

这将打印出8,这意味着我在具有它们的类之外修改了一个受保护的变量......

3 个答案:

答案 0 :(得分:3)

protected变量和方法可以从同一个包的其他类以及当前类的子类访问。

private变量和方法只能从当前类中访问。

如果没有修饰符(没有protectedprivatepublic),则默认情况下,该变量可以从同一个包中的任何类访问,但不能从子类访问。 / p>

请参阅here了解官方文档

答案 1 :(得分:1)

Java中的

protected成员对包中的其他类也是可见的。

将您的main()方法移至其他包中,您将收到错误。

答案 2 :(得分:-1)

  

我认为保护字段的意义在于只有子类和具有受保护字段的类才能访问该变量。

你想错了。

  

创建子类或超类的对象不应授予对这些字段的访问权。

确实如此。 NB你现在正在反驳自己的想法。你的想法包括子类,现在你试图排除它。

  

如果我是对的

你不是。