Java隐式方法/参数?

时间:2012-04-08 19:55:37

标签: java parameters implicit

我目前正在阅读一本关于Android编程的书,在开头几章中有一篇关于Java的小参考指南。但是,我对一些我不太了解的隐式参数进行了解释。

他定义了班级汽车

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 ,因此它“以某种方式”继承了该类?

感谢。

5 个答案:

答案 0 :(得分:7)

想想这段代码:

whatsInTheGarage().drive();

作为简写:

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

现在清楚了吗?所有带有 C-like 语言都像这样。

更新:

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

答案 1 :(得分:3)

whatsInTheGarage返回Car。您正在它返回的实例上调用drive。并不是JoyRide继承了方法,JoyRide正在一个完全独立的对象上调用该方法。

答案 2 :(得分:3)

在第

whatsInTheGarage().drive()

您正在从drive返回的对象上调用whatsInTheGarage方法。 JoyRide本身与Car无关的事实与此无关,因为您并未尝试在drive对象上调用JoyRide。由于whatsInTheGarage返回Car,而您在drive返回的对象上调用whatsInTheGarage,因此会在drive对象上调用Car ;具体而言,Car返回的whatsInTheGarage。这与继承没有任何关系 - 相反,你只是在一个特定声明该方法的类类型的对象上调用一个方法。

希望这有帮助!

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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