5

私は現在、Android のプログラミングに関する本を読んでおり、最初の章に Java に関する素敵な小さなリファレンス ガイドがあります。しかし、暗黙のパラメーターについてよくわからないことに出くわしました。

彼はクラスCarを定義します:

public class Car {
  public void drive() {
    System.out.println("Going down the road!");
  }
}

それから彼はこう続けます。

public class JoyRide {
 private Car myCar;

 public void park(Car auto) {
   myCar = auto;
 }

 public Car whatsInTheGarage() {
   return myCar;
 }

 public void letsGo() {
   park(new Ragtop()); // Ragtop is a subclass of Car, but nevermind this.
   whatsInTheGarage().drive(); // This is the core of the question.
 }
}

JoyRideがCarの拡張ではない場合に、クラスCarから drive() を呼び出す方法を知りたいだけです。メソッド whatsInTheGarage() が戻り値の型Carであるため、そのクラスから「何らかの方法で」継承しているためですか?

ありがとう。

4

5 に答える 5

9

次のコードについて考えてみてください。

whatsInTheGarage().drive();

これの省略形として:

Car returnedCar = whatsInTheGarage();
returnedCar.drive();

これでクリアですか?全てCライクに似た構文を持つ言語は、このように動作します。

アップデート:

myCar.drive();  //call method of myCar field

Car otherCar = new Car();
otherCar.drive();  //create new car and call its method

new Car().drive()  //call a method on just created object

public Car makeCar() {
  return new Car();
}

Car newCar = makeCar();  //create Car in a different method, return reference to it
newCar.drive();

makeCar().drive();  //similar to your case
于 2012-04-08T19:58:21.543 に答える
4

whatsInTheGarageを返しますCardrive返されるインスタンスを呼び出しています。JoyRideメソッドを継承するのではなくJoyRide、完全に別のオブジェクトでメソッドを呼び出しています。

于 2012-04-08T19:58:40.690 に答える
3

ラインで

whatsInTheGarage().drive()

driveから返されたオブジェクトでメソッドを呼び出していますwhatsInTheGarage。オブジェクトを呼び出そうとしているのではないので、それ自体が関連していないという事実はここでは関係ありませJoyRideん。が aを返し、から返されたオブジェクトを呼び出しているため、これはオブジェクトを呼び出します。具体的には、によって返されます。これは継承とは関係ありません。代わりに、そのメソッドを明確に宣言するクラス型のオブジェクトでメソッドを呼び出しているだけです。CardriveJoyRidewhatsInTheGarageCardrivewhatsInTheGaragedriveCarCarwhatsInTheGarage

お役に立てれば!

于 2012-04-08T19:59:18.040 に答える
0

メソッドは Car メソッドを呼び出すことができる Car を返すため、あなたの仮定は正しいです。

于 2012-04-08T19:58:40.347 に答える