2008-12-04 17 views
1

在Java中(一般來說)有沒有一種方法可以讓一個類如此公開以至於它的方法等等......都可以從周圍甚至不實例化的小類訪問?哈,我的意思是...如果我有一個有方法draw()的爸爸班,它實例化一個名爲Hand的嬰兒班和一個叫Deck的班,然後卡組實例化一個名爲Card的babier班,該班有一個方法play(),那裏Play()然後從爸爸課中撥打Draw()的方法?Java中的類之間的方法可見性

這裏的想法是......爸爸班說「甲板!玩(卡)!」然後套牌說「Card!play()!」然後玩轉頭說:「嘿爸爸!畫()!」

PS的想法是......在CCG中,每張牌都有一個不同的「play()」方法,但它們本質上都以相同的方式被調用。玩卡的機會出現了,你可以打電話給它玩。但是卡片本身並沒有做任何事情:不,不,它會根據遊戲規則調用許多方法,這些方法具有可見性。所以,就像MTG裏的一張卡片,上面寫着「抽一張牌,對目標玩家造成一次傷害」。正在調用draw(player,1)和dealDamage(player,1),這大概不在卡片本身中,因爲它們影響了玩家在開始遊戲時實例化的變量,並且同意了人生總數和規則,比如「畫」的意思是?

(元問題:像往常一樣,可能有人請,以便它反映了我問...作爲一個初學者是如此令人沮喪重命名這個問題)

回答

4

當Daddy類實例化Baby類時,它(爸爸)可以將引用傳遞給Baby構造函數,使Baby可以訪問其所有公共方法。

class Daddy { 
    public foo(){...} 
    public createBaby(){ 
     Baby baby = new Baby(this); 
     // baby now has a reference to Daddy 
    } 
} 


class Baby { 
    Daddy daddy; 
    public Baby(Daddy daddy){ 
     this.daddy = daddy; 
    } 
    ... 
    public callDaddy(){ 
     daddy.foo(); 
    } 
} 
+0

好的,我所做的我猜想的是:我已經讓爸爸變成了一本「規則手冊」,並將其引用到所有寶寶班,以便他們可以做規則讓他們做的事情。其實這很好,我想! – Ziggy 2008-12-04 13:56:50

1

您可以:

  • 通過構造函數傳遞對象引用。或由獲得者和制定者。或直接到該功能。
  • 使用繼承。
  • 使用靜態類。
0

從OO的角度來看,我會說使用繼承。一種方法是創建一個抽象類,它不實現子類不會表現相同的方法;並實現對所有子類都表現相同的方法。

0

您還可以定義內部和外部類。然後內部類可以訪問外部類的所有字段。

public class OuterClass{ 
    int x 
    private class InnerClass{ 
     InnerClass(){ 
      x = 10; 
     } 
    } 
} 

然而,你可能會是更好使用一個Singleton模式,在這裏你有一個靜態引用單個資源(如甲板最紙牌遊戲,雖然個CCG往往有一個每播放器),或者在對象的構造函數中傳遞共享資源。在MTG或類似的情況下,我可能會給每張牌一個cast()方法,它需要一個Player和一個目標列表。玩家是施法者,所以像頭腦風暴這樣的咒語可以在玩家身上調用draw()來讓他們抽牌,而永久法術則可以在玩家的控制下分配自己。那麼目標就是這個咒語可能需要的任何其他目標,並且可能是空的或是空的列表(無論你認爲哪個更合適)。