2012-09-19 43 views
1

我有樹類。如何從字段訪問父級方法?

class MyObject{ 
    public void DoSomething() 
    { 
     here I need to call method add from class base. 
    } 
} 

class base 
{ 
    protected final void add(){}  
} 

class extended extends base { 
    private MyObject pObject = new MyObject(); 
    ... 
    { 
     pObject.DoSomething(); 
    } 
} 

我可以創建類,擴展類擴展的每個變化,但我需要使用類型變得可用後才類擴展已經啓動。

我如何從撥打base.add() MyObject內在方法?

+1

的'protected'修飾符允許同一類(包括子類)和相同包訪問,所以只要'類MyObject'和'類base'是在相同的包,你可以訪問'base'的實例上的'base.add()'。作爲一個側面說明,類名應該以大寫字母開頭,正如Java約定所規定的那樣。 – Vulcan

+0

我會說你不能,沒有參考'base'開始 – MadProgrammer

+0

如何添加引用指向擴展到MyObject? – SpoksST

回答

0

你可以做到在幾個方面:

  • 有在MyObject類的extended類的參考。當您在extended類中實例化MyObject變量時,請將其傳遞給參考extended

事情是這樣的:

class MyObject{ 
    private base baseObj; 

    public MyObject(base baseObj){ 
     this.baseObj = baseObj; 
    } 

    public void DoSomething() 
    { 
     //here I need to call method add from class base. 
      //use baseObj to call the methods 
    } 
} 


class base 
{ 
    protected final void add(){}  
} 


class extended extends base { 
    private MyObject pObject; 
    ... 

    public extended(){ 
     pObject = new MyObject(this); 
    } 

    { 
     pObject.DoSomething(); 
    } 
} 
  • 聲明中staticbase類的方法。這樣您就可以調用這些方法而不需要base類的實例。

事情是這樣的:

class MyObject{ 

    public void DoSomething() 
    { 
     //here I need to call method add from class base. 
     //call like this 
     base.add(); 
    } 
} 


class base 
{ 
    protected static final void add(){}  
} 


class extended extends base { 
    private MyObject pObject; 
    ... 

    public extended(){ 
     pObject = new MyObject(this); 
    } 

    { 
     pObject.DoSomething(); 
    } 
} 

一兩件事:這是題外話,但你可能想閱讀有關Java Naming Conventions。以小寫開頭的類名是在命名約定中找不到的。

+0

編譯的第一個變體:) – SpoksST

+0

不能使用第二個解決方案,因爲我無法編輯基類。 – SpoksST

0

虛設這樣的代碼:

class MyObject{ 
    public void DoSomething(Base base) 
    { 
     base.add(); 
    } 
} 

class extended extends base { 
    private MyObject pObject = new MyObject(); 
    ... 
    { 
     pObject.DoSomething(this); 
    } 
}