2014-09-24 41 views
1

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

//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,这意味着我修改了一个受保护的变量,它有他们的类之外......在Java中

+0

did you mean System.out.println(a.x); ? – 2014-09-24 00:20:32

+0

@ user889742 yea对不起 – 741236987 2014-09-24 00:35:09

回答

1

protected成员也给包中的其它类可见。

将您的main()方法移动到不同的包中,您将看到一个错误。

+0

(这是一个领域不是一种方法,但有些东西;)) – MadProgrammer 2014-09-24 00:15:49

2

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

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

如果没有修饰符(protected,privatepublic),那么默认情况下该变量可以从同一包中的任何类访问,但不能从子类访问。

看到here的官方文档

-1

我想有保护的领域,是因为这样的变量是仅由子类,并具有保护领域的类访问点。

你以为是错的。

制作子类或超类的对象不应该授予对这些字段的访问权限。

它的确如此。注意你现在在这里与你自己的想法相矛盾。你的想法包括了子类,现在你试图排除它。

如果我是正确

你不是。

+0

对于第一部分,他实际上正确地思考几种编程语言。第二部分,它的不好的措辞,但他的意思是创造超类的对象,所以并不真正矛盾自己。今天感觉活泼吗? – 2014-09-24 00:26:29

+0

哈哈,这个人就像对我说的一切恨。我说我做了什么的原因是因为我试图区分公众和受保护的...... – 741236987 2014-09-24 00:36:30

相关问题