2012-04-03 6 views
1

私の質問を理解するのが難しい場合は、まず謝ります。私は、私が助けが必要なものを正確に説明しようとするのに苦労している。私はJavaに慣れていないし、参照などで渡すことのコンセプト。コンストラクタ内のオブジェクトパラメータ

基本的に、私は以下のコードが間違っている理由を知る必要があります。コンストラクタのパラメータとして渡されたオブジェクトのメソッドをJavaで使用するようにJavaに指示するにはどうすればよいですか?もう一度謝罪し、読んでくれてありがとう!

public ClassOne(ClassTwo twoObject){ 

} 

public boolean OneMethod(){ 
    twoObject.MethodName(); // twoObject cannot be resolved. 
} 

答えて

2

...

public class classOne{ 

    Classtwo object; 
    public ClassOne(ClassTwo twoObject){ 
     object = twoObject; 
    } 

    public boolean OneMethod(){ 
     object.MethodName(); 
    } 
} 

は、それはあなたのお役に立てば幸いです:)

+0

もちろんです。どうもありがとうございます! :) – user1310148

+0

あなたは大歓迎です:) –

2

あなたは、コンストラクタの範囲外でそれにアクセスするために、ローカルこのクラスのインスタンス内twoObjectを参照する必要があります。現在、コンストラクタは渡されたアイテムと共に実行され、何も実行せず、twoObjectのインスタンスは、すべての実際の目的でこのクラスから消えます。あなたはそれが働いてイマイチ別の方法でローカルオブジェクトを使用している、あなたはそれを保存し、それを使用するためのグローバルオブジェクトを作成することができます

0

メソッド "MethodName"が呼び出されたときに "twoObject"がスコープ内にないため、コードが正しくありません。 コンストラクタで使用されている場合はスコープ内でしたが、メソッド "OneMethod"ではスコープ内にありません。 これを使用するには、クラス変数を作成し、それをコンストラクタの "twoOject"に割り当てることができます。 これをクラス全体で使用できます。

public ClassOne { 

    private ClassTwo twoObject; // instance variable 

     public ClassOne(ClassTwo twoObject){ 
      this.twoObject=twoObject; 
     } 

     public boolean OneMethod(){ 
     twoObject.MethodName(); // twoObject is now a class memeber and hence in scope and hence will be resolved 
     return true; //could also be false, just adding a return statement as the return type is boolean 
     } 

    } 
+0

正しい用語は "インスタンス変数" – newacct

+0

はい、[class variable](http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html)です。異なる何かを意味する。しかし、そうでなければ良い答え。 – Leigh

関連する問題