2011-04-08 31 views
0

在Java中,我有這樣的事情的Java:調用方法

public class A { 
    private String title; 
    public A() { 
    // do something 
    } 

    public void run() { 
     B b = new B(); 
     b.run(); 
    } 

    public void changeTitle(String newTitle) { 
     this.title = newTitle; 
    } 
} 


public class B { 
    public B() { 
    // do something 
    } 
    public void run() { 

    } 
} 

我的問題是在方法run()的B的,是有可能調用方法changeTitle()是在改變的標題A實例化B的實例?

謝謝

+0

對象與實例化對象之間沒有隱式鏈接。正如大衆在下面所說的,你需要明確地表達這種聯繫。 – 2011-04-08 16:52:46

+0

爲什麼不只是執行它?這是我猜測的最快方式。 – Bhushan 2011-04-08 16:54:53

回答

1

B只能調用A上的方法,如果它包含對A實例的引用。您可以將A的實例傳遞給B來實現此目的。

public void run() { 
    B b = new B(this); 
    b.run(); 
} 

public class B { 
    private A a; 
    public B(A a) { 
     this.a = a; 
     a.changeTitle("Ha!"); 
    } 
} 
0

當然。在B的構造函數中傳遞A的實例。

0

這隻有在您調用B的run()方法時通過this作爲參數纔有可能。

1

如果B接受在其構造A型,和當你說新的B,在「這個」類似傳給

public void run() { 
    B b = new B(this); 
    b.run(); 
} 

現在你有一個對象的副本與您的合作。

+0

它真的是副本(即新實例)還是對'A'原始實例的引用? – Femaref 2011-04-08 16:53:21

+1

@Fermaref其參考。 – subsub 2011-04-08 17:09:41

+0

感謝subsub,我是迄今爲止不是java的專家,你可以告訴:D。 – 2011-04-08 17:17:48

0

除非你安排的B情況下,知道自己應該做什麼實例A,要(例如,通過傳遞到構造函數B並記住它)。

如果你正在做類似的事情,那麼你應該考慮,例如,如果一個B的實例是由A的實例以外的東西創建的,你想要發生什麼。

0

沒有。這樣的B實例不知道是誰創建的。然而,隨着乙作爲

public class B { 
    private A creator; 

    public B(A creator) { 
     this.creator = creator; 
     // do something 
    ... 
    } 

A.run()創建new B(this),B可以調用在其run()方法creator.changeTitle("whatever")

0

B是A的非靜態內部類,你調用A的方法(並訪問它的fieldes)。