2013-03-24 53 views
1

此問題涉及本身(而不是它們的方法或數據)需要聲明爲公共。什麼時候在課堂定義中需要「公開」?

目前我是一個Java noob,自學只是非常基礎。我熟悉其他幾種語言,但在Java中,我只寫了非常基本的程序,就像在一個主類(一個文件)中的所有內容一樣。

所以今天我決定嘗試一些新東西,並把課程放在單獨的文件中。讓我感到意外的是,當我將課程放在單獨的文件中時,即使課程沒有標記爲「公開」,主課程也可以訪問此課程。

爲了一個明確的例子,可以說我有只是兩個文件在一個文件夾中。文件「mainprog.java」包含以下內容:

class mainprog { 
    public static void main(String[] args) { 
     hello myHello = new hello(); 
     myHello.sayHello(); 
    } 
} 

和文件「hello.java」包含以下內容:在「你好」被指定爲公共

class hello { 
    void sayHello() { 
    System.out.println("Hello world"); 
    } 
} 

沒什麼,但是這可以編譯和運行就好了

javac mainprog.java 
java mainprog 

所以我只是想知道類定義真的需要「公共」嗎?

編輯添加的新的信息 正如答案下面的建議,我嘗試添加一個「一攬子」語句的每個文件,以便從不同的封裝使之。正如預期的那樣訪問類「你好」,然後被拒絕,除非我做了兩個類「你好」和它的方法「的sayHello()公開的。謝謝大家。

+1

public class is visible *在包外*他們在 – 2013-03-24 15:57:14

+2

中聲明http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html – 2013-03-24 15:58:00

回答

1

兩個類都包私人,他們都居住在相同的文件夾,所以這兩個類可以看到對方。

如果一個類被駐留在封裝外部,或從另一個包另一類需要訪問這些,就無法使用。

Here's a reference to Oracle's visibility of methods/classes/fields.

+0

謝謝。我可能應該在問題中增加一個問題,那就是我不知道包是什麼,或者指定文件是否是包的一部分。因此,就像文件都在同一個**文件夾中一樣簡單(在這種情況下),那麼它們被認爲是同一個包的一部分(即使沒有正式定義包)。 – Stuart 2013-03-24 16:01:25

+1

是的,這是正確的。如果沒有定義軟件包,則認爲它在默認軟件包中。 – Makoto 2013-03-24 16:03:31

+0

謝謝真誠,這回答了我的問題。是的,我用google搜索了一下,結果發現公衆需要在當前的軟件包外面看到這個類。只是因爲我知道我沒有定義任何軟件包,所以感到驚訝的是沒有「公共」說明符。你已經清除了我的誤解。謝謝。 – Stuart 2013-03-24 16:08:04

1

包裝定義

Java包是一種將Java類組織到與Modula模塊類似的名稱空間中的機制。 Java包可以存儲在稱爲JAR文件的壓縮文件中,允許類作爲一組而不是一次下載得更快。程序員通常也使用包來組織同屬於同一類的類或提供類似的功能。

程序包爲其包含的類型提供唯一的名稱空間。 同一個包中的類可以訪問彼此的包訪問成員。

使用公共課。

當你想從另一個包製作這個類的對象。

假設您在Demo包中有一個類。

Demo package. 
    Demo.java 

這兩個類都在不同的包中。

Demo1 package 
    Demo1.java 

現在要創建Demo1.java Demo.java類的對象,它是在不同的包,那麼你需要定義Demo類公衆。

閱讀docs

+0

感謝TGMCians。我還沒有準備好定義軟件包。我意識到他們的存在,但尚未研究他們如何定義或任何其他。看起來我不得不做下一件事來學習。 :) – Stuart 2013-03-24 16:13:36

1

默認情況下,同一個包[或文件夾]下的所有類都具有訪問修飾符'protected'。所以你可以毫無困難地訪問課程。參考'繼承'的概念,你會更好地瞭解訪問修飾符。乾杯!

相關問題