2014-11-03 338 views
0

對於下面Ocean類,如何從派生類訪問內部類構造函數?

public class Ocean { 

    /** 
    * Define any variables associated with an Ocean object here. These 
    * variables MUST be private. 
    */ 
    // width of an Ocean 
    private final int width; 
    // height of an Ocean 
    private final int height; 

    class Critter { 

     /** 
     * Defines a location of a Critter in an Ocean. 
     */ 
     Point location; 

     public Critter(int x, int y) { 
      location = new Point(x,y); 
     } 

     public Point getLocation() { 
      return location; 
     } 
    } 

    private Critter[][] oceanMatrix; 
} 

我想從下面類Shark構造訪問構造Critter上面類。

class Shark extends Ocean implements Behaviour { 

    public Shark(int x, int y, int hungerLevel) { 
     super(x,y); 
    } 
} 

如何從Shark類的構造函數訪問Critter類的構造函數?

+3

鯊魚是海洋嗎? – 2014-11-03 01:52:39

+0

@ChrisMartin +1我的意圖是實際擴展Ocean.Critter,直到我看到下面的答案和內部類「Critter」的正確名稱是'Position'時才知道。 – overexchange 2014-11-03 02:12:40

+1

「內部類的小人物的名字是位置」。我不認爲這是。擴展一個類意味着一個「是」的關係。如果「階級鯊魚延伸位置」,這意味着鯊魚「是一個」位置。但事實並非如此。它*有一個位置,所以你可以使用Position類作爲Shark的一個字段,但是如果你想讓Shark擴展某些東西,那麼正確的類是Critter。 – Boann 2014-11-03 03:32:35

回答

6

似乎訪問Critter像你應該擴展Critter代替海洋:

class Shark extends Ocean.Critter implements Behaviour{ 
... 
    public Shark(int x, int y, int hungerLevel){ 
     super(x,y); 

    } 
... 
} 

爲此,Critter需要成爲一個靜態的內部類。我不知道這個設計有多少是屬於你的,但是內部類應該限制在彼此強烈依賴的類中,這裏不是這種情況。如果可以的話,把小怪物帶出海洋。

+0

+1表示Critter不應該是內部類。看起來像作者可能會混淆內部類的類中的類包。 – 2014-11-03 02:03:59

+2

如果需要,如果Critter是一個非靜態的內部類,使用名爲[限定超類構造函數調用]的模糊語法,則可以使其工作(http://docs.oracle.com/javase/specs/jls/se8/ HTML/JLS-8.html#d5e14226)。例如,「鯊魚類延伸到海洋。鯊魚{鯊魚(洋洋,int x,int y){ocean.super(x,y); }}。 – Boann 2014-11-03 02:07:14

+0

如果我將'Critter'類重命名爲'Position',你認爲繼承內部類'Position'到'Shark'是否有意義。爲什麼人們會認爲內部階層應該只限於外部階層? – overexchange 2014-11-03 02:10:34

3

只要Shark是在同一個包Ocean,並且添加了static修飾符Critter的類聲明,你應該能夠new Ocean.Critter()

+0

是的,將'Critter'聲明爲'Ocean'中的靜態成員並且不需要在'Shark'中繼承'Ocean.Critter'更有意義。但從語法的角度來看,如果我們繼承'Ocean.Critter'到'Shark'類,那麼我使用super(x,y)會出錯,爲什麼? – overexchange 2014-11-03 02:00:57

相關問題