2014-11-04 42 views
2

我今天的問題是關於創建一個對象,還有哪些其他類可以訪問它的方法。我想了解線程,但由於JPanels不支持線程,所以我都感到困惑。什麼類可以訪問我的方法?

我創建了一個簡單的類是這樣的:

public class MyMethodClass { 
    public MyMethodClass() { 
     MyClass myClass = new MyClass(); 
    } 
    public void MyMethod() { 
     //do something with the variables 
    } 
} 

所以我現在有一個名爲MyClass的一個新的類對象(MyClass的是另一個類,其內容並不重要)。因爲他們都是公開的,myClass有權訪問MyMethod

如果沒有,有沒有辦法複製MyMethodClass傳遞給myClass,以便它可以使用myMethod,知道MyMethodClass創建擺在首位myClass

如果類MyClass是嵌套類,它是否可以訪問MyMethod

+0

如果你的嵌套MyClass是非靜態的,那麼MyClass的一個實例將有一個對外部類的引用this。所以在這種情況下,是的,它可以訪問其父實例方法。 – 2014-11-04 23:03:23

回答

1

MyClass將無法​​訪問MyMethodClass中的方法,除非它創建它的一個實例,在這種情況下,這是一個壞主意。

你可以通過可能的構造函數或setter方法傳遞MyClassMyMethodClass一個實例,但你其實可以更好地利用通用的接口,這會脫鉤兩個階級,提高其可重用性

開始通過定義這兩個類之間的約定(如接口)...

public interface SomeMethods { 
    public void MyMethod(); 
} 

加入的SomeMethods實現傳遞給它通過構造函數或setter方法MyClass的能力...

public class MyClass { 
    private SomeMethods someMethods; 
    public MyClass(SomeMethods someMethods) { 
     this.someMethods = someMethods; 
    } 

    public void someWork() { 
     someMethods.MyMethod(); 
    } 
} 

MyMethodClass實現SomeMethods接口,並傳遞給MyClass

public MyMethodsClass implements SomeMethods { 
    public MyMethodClass() { 
     MyClass myClass = new MyClass(this); 
    } 
    @Override 
    public void MyMethod() { 
     //do something with the variables 
    } 
} 

的本身的引用只是要小心,它通常不被認爲是一個好主意,通過this到其他類或方法從構造方法中,如對象的狀態可能不完全實現,並且方法/類所依賴的某些值可能尚未初始化。

相關問題