2010-09-14 89 views
4

我可以使用Access指定符「public」或默認值創建Main類。爲什麼不能保護java主類?

但爲什麼我不能創建與保護。由於默認本身允許爲什麼不保護。

市民:

public class MainClass { 
public static void main(String[] args) { 
} 
} 

默認:

class MainClass { 
public static void main(String[] args) { 
} 
} 

保護:

protected class MainClass { 
public static void main(String[] args) { 
} 
} 

其示值誤差: 該類MainClass非法修改;只有公共,摘要&最終被允許MainClass.java SCJP/src行1 Java問題

+1

本質'public'意味着類_outside_其包裝可見,而_default_或_package_作用域意味着它是隻對同一個包內的其他類可見。什麼是頂級類型的語義才能得到保護?由於'protected'通常是指繼承的一個特性(只對子類可見),所以它只對內部類有意義。 – 2010-09-14 07:03:50

回答

15

protected涉及給成員的包含類型訪問的子類。這裏沒有包含類型,那麼它意味着什麼?

請注意,這與main無關,因爲它適用於任何頂級課程。這有效的嵌套類型來雖然保護:

public class Foo { 
    protected static class Bar{} 
} 

這樣的Foo子類來訪問Bar

+0

什麼是包含類型意味着什麼?你能解釋一下爲什麼我們不能用頂級類保護。我明白頂級類不是私有的,因爲我們不能創建該類的對象,所以沒有任何意義。 – 2015-02-13 04:36:58

+0

@AppKart:包含其他類型的包含類型 - 所以包含Bar類型的是「Foo」。基本上,對於一個類的* any *成員,'protected'授予該成員對包含該成員的類的子類的訪問權限。但是頂級班級*不是任何班級的成員。 – 2015-02-13 07:01:43

2

受保護的或私人的班級沒有意義 - 作爲頂級班級,而不是內部班級。這樣的類別將不可用。受保護的意思是,班級中的元素可以被兒童看到。但是如果整個班級都會成爲一攬子計劃呢?在這種情況下,任何其他類甚至可以看到這樣的類(即使在相同的包中),直到它擴展這樣的類。這很奇怪,這就是爲什麼它被禁止。

0

您是否通過將封閉類設置爲受保護來影響主方法的可見性?
據我知道,對於一個主要方法是訪問有您需要確保兩兩件事:

  1. 封閉類是公共的。 (我認爲它也可以默認)
  2. 封閉類和父文件具有相同的名稱。

希望這有助於:)

+0

(1)由於封閉類必須是頂層,因此它只能是公共或私有包。兩者都有效。(2)封閉類不需要與父文件具有相同的名稱。 – emory 2010-09-14 07:15:26

+0

如你所說封閉類可以是公開的或默認的。但保護是公開和默認寫入。所以我們爲什麼不能使用它.. – Santhosh 2010-09-14 07:27:45

+0

@santose:受保護的只對那個班的孩子可見。主類是程序的入口點,執行開始的地方,所以它必須是公開的。只有這樣外部實體(即他們的系統)才能看到並使用它。 – 2010-09-14 08:05:37

相關問題