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返回一个Car。您正在调用drive它返回的实例。不是JoyRide继承方法,JoyRide而是在完全独立的对象上调用方法。

于 2012-04-08T19:58:40.690 回答
3

在行

whatsInTheGarage().drive()

您正在调用drive从返回的对象的方法whatsInTheGarageJoyRide本身不相关的事实Car在这里无关紧要,因为您没有尝试调用drive对象JoyRide。由于whatsInTheGarage返回 aCar并且您正在调用从 返回drive的对象whatsInTheGarage,因此 this 将调用drive一个Car对象;具体来说,CarwhatsInTheGarage. 这与继承没有任何关系——相反,您只是在一个专门声明该方法的类类型的对象上调用一个方法。

希望这可以帮助!

于 2012-04-08T19:59:18.040 回答
0

您的假设是正确的,因为该方法返回 Car 它可以调用 Car 方法。

于 2012-04-08T19:58:40.347 回答
0

不要忘记 Joyride 类有一个 Car 类型的字段。由于这个原因,使用该字段,您可以调用 Car 类的方法。

于 2014-09-24T18:13:38.697 回答