2015-09-17 35 views
3

所以有定義爲兩類:子類是否總是與Java中的超類在同一個包中?

public class SuperClass { 
     int count = 5; 
     SuperClass() { 
     } 

    } 

    public class SubClass extends SuperClass { 
     SubClass() { 
      super(); 

    } 

SubClass sub = new Subclass(); 
System.out.println(sub.count); // prints out 5 

除非我默認可見性修飾符的理解是錯誤的,我認爲默認修飾符是,只有在同一個包中的類可以訪問變量計數。所以這意味着我的SubClass與我的SuperClass在同一個包中,但我沒有指定它們在我的代碼中的任何位置。這是否意味着一個SubClass總是與SuperClass在同一個包中?

+0

你是否在兩個不同的文件中定義了你的兩個類?如果是這樣,你把它放在哪個包裏? –

回答

6

你是對的:默認訪問修飾符(也稱爲package-private)不能從子類訪問,如果它在另一個包中。在你的情況下 - 兩個類都在同一個目錄中,這隱含地表示它們在同一個包中。

+0

除了他的問題有更多的一般範圍+看類,他們是公開的他的情況,所以問題更一般。 –

+0

@YassinHH這個類的可見性超出了這個範圍。這個問題的唯一問題是變量count的可見性。 – alfasin

+0

他選擇變量的例子來提出一般問題。但無論如何...仍然是一個downvote我猜.. –

2

不,子類可以與其超類不同。

從代碼片段中很難說,但我假設你的所有示例代碼都在一個文件中?如果是這樣的話,那麼這兩個類將都放在同一個包中。如果您沒有在文件頂部指定package,那麼它就是它們都屬於的「默認包」。

如果要將這兩個類分成不同的文件並將它們放在不同的包中,您會發現預期的結果:​​將不再能夠訪問SuperClass中定義的字段。

+0

看到我對YassinHH的評論。 – alfasin

+0

我不關注。我說他不能從'SubClass'中的'SuperClass'中訪問字段,如果它們在不同的包中。爲什麼要投票? –

+1

我收回了downvote,但請注意,您的答案並不清楚,因爲您從「不,它們可以位於不同的包裝中」開始。如果他想訪問這個變量,這是不正確的。 – alfasin

相關問題