2010-03-21 62 views
-1

我有Class1,它擁有一些方法:如何調用所有者的方法?

  1. setSomething()
  2. createObjectOfClass2()

現在,當我創建的Class2對象,是有可能從它調用setSomething方法?

+2

-1,你阻撓大家試圖回答一個誤導性的標題,而自己太。 – 2010-03-21 16:44:52

+0

你能舉一個你想要做什麼的具體例子嗎? – 2010-03-21 16:49:28

回答

0

如果Class2中沒有擴展的Class1,那麼你就可以在1類的任何實例調用setSomething(),如果它不是一個靜態方法:

Class1 c = new Class1(); 
c.setSomething(); 
+0

Class2似乎不是Class1的子類。 – 2010-03-21 16:37:24

+0

我通過錯誤的標題讓你神祕。 Class2不是從class1派生的。 – joseph 2010-03-21 16:40:27

+0

@joseph:然後編輯它,'parent'的方法記住Class2擴展Class1 – Roman 2010-03-21 16:42:29

2

如果你喜歡,但你介紹的耦合,這稍後會使分離功能變得相當困難。只需公開setSomething並將第一個對象的引用傳遞給第二個構造器。

public class Class1 { 
    Class2 object2 = null; 

    public void setSomething(Object something) { ... } 

    public void createObjectOfClass2() { 
     object2 = new Class2(this); 
    } 
} 

public class Class2 { 
    public Class2(Class1 parent) { 
     parent.setSomething(new Foo()); 
    } 
} 
+0

'Class2(Class1 parent)' - 參數的名字非常奇怪,其中Class2不是從Class1繼承的。 – Roman 2010-03-21 16:43:18

+0

羅馬:「父母」是原來的標題,所以我去了。我認爲它適合:我個人不喜歡用「父母」作爲「超類」的假名。正如你在另一評論中所說的那樣,「所有者」也適合 - 如果你喜歡,隨時可以改變它。 – 2010-03-21 16:47:14

0

呼叫Parent.this.method()

例如爲:

public class K1 
{ 
public class K2 
    { 
    public void hello() 
     { 
     K1.this.setSomething(); 
     } 

    } 

public void setSomething() 
    { 
    System.out.println("Set Something"); 
    } 

public K2 createObjectOfClass2() 
    { 
    return new K2(); 
    } 

public static void main(String args[]) 
    { 
    new K1().createObjectOfClass2().hello(); 
    } 


} 
+0

但我不想創建新的實例,我需要從實例調用它,創建類2 – joseph 2010-03-21 16:44:20

相關問題