0

对于所有不熟悉Greenfoot的人,以下是上下文:-

Greenfoot是一个使用一些动画的java学习工具。在此工具中,有一个名为“Actor”的预定义类,其中包含一些预定义的方法。我们可以通过创建此类的子类来添加对象,例如“Car”、“Truck”等。

我为“演员”创建了名为“汽车”和“卡车”的子类。我从 'Car' 类中的一个方法中调用了 'Actor' 类中的预定义方法,称为 'move(一些表示运动速度的参数)' move(5);

我的问题是:为什么我不需要在此处提及“Car”类对象,例如:c1.move(5);“c1”是“Car”类对象?我可以理解,由于我没有在'Car'类中定义'move'方法,它会直接调用并实现'Actor'类中的预定义方法,但是它怎么知道我的意思是'Car' ' 这里的类对象?它也可能是“卡车”类对象!是因为我从“汽车”类方法中调用该方法,它是在推断吗?

如果是,那么这是 java 中的一般规则还是只是 Greenfoot 的特定实现?

4

1 回答 1

0

假设在 main() 中,您正在创建 Car 类的一个对象,并调用一个方法,比如 methodThatCallsMove():

Car c = new Car();
c.methodThatCallsMove();

在此方法中,您只需调用 move(5):

methodThatCallsMove(){
  move(5);
}

这将自动调用当前对象的(即c)方法move。此处绑定到对象的 move() 版本c取决于您是否在 Car 类中实现了单独的 move() 方法,或者您是否只是继承了 Actor 类中的原始 move() 方法。前一个条件调用在您的 Car 类中实现的 move(),后者将调用您的 Actor 类中的那个。

希望这可以帮助。

于 2016-06-26T08:28:07.407 回答