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

我正在读一本关于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()。是不是因为方法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()