Java隐式方法/参数?
我正在读一本关于Android编程的书,在开始的几章中有一本关于Java的很好的参考指南。然而,关于隐式参数,我遇到了一些我不太理解的问题 他定义了汽车的类别:Java隐式方法/参数?,java,parameters,implicit,c,Java,Parameters,Implicit,C,我正在读一本关于Android编程的书,在开始的几章中有一本关于Java的很好的参考指南。然而,关于隐式参数,我遇到了一些我不太理解的问题 他定义了汽车的类别: public class Car { public void drive() { System.out.println("Going down the road!"); } } 然后他继续说: public class JoyRide { private Car myCar; public void park(C
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()。是不是因为方法whathinthegarage()是返回类型Car,因此它“以某种方式”继承自该类
谢谢。想想这段代码:
whatsInTheGarage().drive();
简而言之:
Car returnedCar = whatsInTheGarage();
returnedCar.drive();
现在清楚了吗?所有具有类-like语法的类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
您的假设是正确的,因为该方法返回一辆车,它可以调用Car方法。
WhathintheGarage
返回一辆车。您正在调用它返回的实例上的drive
。并不是说JoyRide
继承了这个方法,JoyRide
在一个完全独立的对象上调用这个方法。在这行
whatsInTheGarage().drive()
您正在对从车库中返回的对象调用whathinthegarage
的drive
方法。JoyRide
本身与Car
无关,因为您没有试图调用JoyRide
对象上的drive
。由于whathinthegarage
返回一辆Car
并且您正在对whathinthegarage
返回的对象调用drive
,这将调用Car
对象上的drive
;具体来说,whathinthegarage
返回的Car
。这与继承没有任何关系——相反,您只是在一个类类型的对象上调用一个方法,该类类型专门声明该方法
希望这有帮助 别忘了Joyride有一个类型为Car的字段。有了这个字段,你可以调用Car类的方法。因为这个原因。我不认为java是一种类似C语言。AshBurlaczenko:我在讲语法,我的意思是C语言、C++语言、C语言、java语言、JavaScript……我会澄清你的意思;由于类型为Car的myCar是从车库中返回的,因此我们可以从返回的值调用类型为Car的方法。。?但是我不明白。。。车库中的whathinthegarage既不返回对象,也不(在您的示例中)returnedCar是Car的实例。。。这只是一个Car类型的变量。@yackyackyack:我在我的答案中添加了很多例子,请仔细研究。还要考虑从一本java书开始学习基础知识。你的Android书中关于Java的一小章可能不足以学习编程基础知识,我确实学习了基础知识。我刚才把代码看错了。。。我不认为我的车是实例化的(忽略公园(新的碎布机()):D。但是非常感谢你,伙计。。。忽略这件愚蠢的事情,但这些额外的例子对我来说很有价值。书签!这对我来说很有意义,谢谢兄弟。我意识到我忽略了对象实际上是在代码中实例化的。。。这就是为什么我无法理解如何从未实例化的对象调用drive()