2012-02-16 16 views
2

これは非常に基本的な質問ですが、なぜ私の質問を達成することができるかできないのかについての説明が大好きです。Java - クラスインスタンシエーションとアクセスの基礎

私は文字列を含むクラス(A)を持っていて、その文字列のためのメソッドを設定しています。最初のクラス(A)から別のクラス(B)をインスタンス化すると、新しいクラス(B)の最初のクラス(A)にアクセスして、最初のクラスの文字列)。

私が尋ねる唯一の理由は、メインクラスからいくつかのボタンを返す新しいクラスを作成して、同じような問題のプロジェクトに取り組んでいることです。ボタンをクリックすると、メインクラスのActionListenerが初期クラスのStringを変更するはずですが、クラスを再インスタンス化せずに元のクラスのsetメソッドにアクセスできないようです。

申し訳ありませんが、私は本当になぜこれが問題なのか理解したいと思っています。正しい方法は何ですか。私はおそらくこれについて撃墜されるだろうが、どんな助けもありがたい。

+3

私は問題を説明する短いコンパイル可能な例を提供できますか? – amit

+0

これは、http://stackoverflow.com/questions/9300446/calling-a-function-in-a-classes-owner-classに非常によく似ています –

+0

「私は別のクラス(B)を最初からインスタンス化しますクラス(A) "? –

答えて

2

クラスBは、それが作成されたAのインスタンスの参照を保持する必要があるためです。これがデフォルトで行われるべき正式な理由はありません。たとえば、

public class B { 

    private final A creator; 

    public B(A creator) { 
     // you might want to check for non null A 
     this.creator = creator; 
    } 

    public void foo(String value) { 
     creator.setText(value); 
    } 
} 
+0

私はあなたのソリューションを試しましたが、エラーが発生しました:例外 "AWT-EventQueue-0" java.lang.NullPointerExceptionの例外。なぜこのエラーメッセージが表示されるのかわかりません。どうすればいいですか? – mino

+0

私はあなたに役立ついくつかのコードを貼り付ける必要があります。 –

+0

あなたのソリューションに基づいて問題を解決しました。ありがとうございます。 – mino

0

Classは、Objectで参照されていないと呼び出せません。だから、

クラスBにこのようなものを作成するために
myobject = FirstClass.new //I am not sure about java syntax as its been many years. 

を持って、あなたはこのオブジェクトでのFirstClassのすべてのメソッドを呼び出すとSecondClassでそれらを使用することができます。

0

BがAを拡張する場合は、BがAを拡張していない場合は、それがAのメソッドの知識を持たないA.

に関連するBでのパブリックメソッドを呼び出すことができます。これは、Javaの継承がどのように機能するかです。

1

最も洗練された解決策であるかどうかは分かりませんが、クラスBのオブジェクトにクラスAのオブジェクト(クリエイター)の参照が必要な場合は、クラス(B)などにAlessandroサンプルコードを使用できますこれはクラスA:

public class A 
{ 
    private String text; 

    public void createB() 
    { 
     new B(this); 
    } 

    public void setText(String b) 
    { 
     text = b; 
    } 
} 
+0

新しいオブジェクトに既存の参照を追加したいと思うかもしれませんが。 – Martin