我目前正在阅读一本关于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 ,因此它“以某种方式”继承了该类?
感谢。
答案 0 :(得分:7)
想想这段代码:
whatsInTheGarage().drive();
作为简写:
Car returnedCar = whatsInTheGarage();
returnedCar.drive();
现在清楚了吗?所有带有c的 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类的方法。