2014-09-24 40 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

相關問題