0

Javaで、オブジェクト自体である独自のフィールドの1つからオブジェクトのフィールドにアクセスできるかどうか疑問に思っていました。サンプルコードを提示しましょう:

クラスがあるとします(ここでコードを要約しているので、提示されたコードはコンパイルされないことがわかっています)

public class Driver{
// constructor
public Driver(){
}
// method
public double findArea(){
return ???; <<--line #1 in question  How do I get the length and width fields in here?
}
}// end driver class

public class Car{
 public double length; 
 public double width;
 public Driver me;
public Car(){
length=20.5;
width=11.2;
me = new Driver();
}
}

したがって、メインセクションには、次のようなものがあります

public static void main(String arg[]){

car = new Car();
car.me.findArea();  << ---line #2 in question
}

そのため、問題の 2 行目では、パブリック メソッド .findArea() が実行され、呼び出し元のオブジェクトのフィールドを利用して数値を取得する必要があります (問題の 1 行目)。

Javaを介してそれはまったく可能ですか? そうでない場合、この問題に対する最善の概念的解決策は何でしょうか?

ありがとう!!

4

3 に答える 3

2

あなたの質問を正しく理解していれば...

いいえ、 のインスタンスDriverから、それを参照するフィールドをCar持つに逆方向に移動する方法はありません。driver結局のところ、そのようなインスタンスがいくつか存在する可能性もあれば、まったく存在しない可能性もあります。Car

Driverにそれがどの部分であるかを知らせたい場合は、その情報を表すCarフィールドが必要であり、 (たとえば)からコンストラクターにDriver渡すことによって設定します。ただし、コンストラクター内でのエスケープを許可する (コンストラクターからコンストラクターを呼び出す) ことは、完全に初期化される前にオブジェクトの存在を通知しているため、危険な場合があります。thisCarDriverthisDriverCar

于 2012-07-26T20:57:13.047 に答える
0

最初のオブジェクトへの参照が必要です。次のようなことができます:

public class Driver {

    private Car car;

    public Driver(Car car){
        this.car = car;
    }

    public double findArea(){
        return car.getLength() * car.getWidth();
    }

}

public class Car {

    public double length; 
    public double width;
    public Driver me;

    public Car(){
        length=20.5;
        width=11.2;
        me = new Driver(this);
    }

    // getters and setters

}
于 2012-07-26T20:59:17.307 に答える
0

他の人はすでにあなたの質問に答えています。publicオブジェクト指向プログラミングでは、データ メンバーは Bad Thing(TM) と見なされることを指摘しておきます。Francisco が示すように、代わりに getter と setter を使用し、メンバー変数自体を変更してprivateアクセスする必要があります。

そうは言っても、あなたのデザインは最高ではないと思います。ドライバーが車の面積を計算するのはなぜですか? 車は、特に幅と長さを既に知っているので、それ自体の面積を計算する責任があるべきではありませんか? このようにコードを設計すると、元の質問で問題を引き起こした問題を完全に消去できます。

于 2012-07-26T21:07:17.400 に答える