2016-06-26 2 views
0

Для всех тех, кто не знаком с Greenfoot, ниже контекст: -Наследование связанных запросов относительно Greenfoot

Greenfoot является инструментом Java обучения, используя анимацию. В этом инструменте есть предопределенный класс под названием «Актер» с некоторыми предопределенными методами. Мы можем добавлять объекты, создавая подклассы этого класса, такие как «Автомобиль», «Грузовик» и т. Д.

Я создал подклассы для «Актера» под названием «Автомобиль» и «Грузовик». Я назвал предопределенный метод в классе «Актер» под названием «move (некоторый аргумент, обозначающий скорость движения)», из метода в классе «Car»: move(5);.

Мой вопрос заключается в следующем: почему мне не нужно упоминать объект класса «Автомобиль» здесь, как в: c1.move(5); где «c1» - это объект класса «Автомобиль»? Я могу понять, что, поскольку я не определил метод «move» в классе «Car», он будет напрямую вызывать и реализовывать предопределенный метод в классе «Актер», но как он может знать, что я имел в виду «Автомобиль» 'объект класса здесь? Это может быть объект класса «Грузовик»! Это потому, что я вызываю метод из метода класса «Автомобиль», это выводит это?

Если да, то это общее правило в java или только конкретная реализация Greenfoot?

+0

Где вы делаете вызов метода move()? –

+0

Кроме того, если у вас нет метода move(), определенного в классе Car или Truck, это означает, что для них обоих действует одна и та же функция move(), определенная внутри Actor (которая унаследована классами Car и Truck). Если вам нужна отдельная реализация для любого из двух классов, вы должны определить свой собственный метод move() в Car/Truck соответственно. –

+0

@ AnkitKhettry Из метода в классе Car. – amsquareb

ответ

0

Пусть в основной(), вы создаете объект класса автомобиля, и вызов метода, скажем methodThatCallsMove():

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

В этом методе, вы вызываете шаг (5) просто:

methodThatCallsMove(){ 
    move(5); 
} 

Это автоматически вызовет (т.е. c) метод текущего объекта move. Версия move(), привязанная к объекту c, зависит от того, был ли вы реализован отдельный метод move() в вашем классе Car, или вы просто наследуете исходный метод move() в классе Actor. Первое условие вызывает move(), реализованный в вашем классе Car, последний будет называть его в вашем классе Actor.

Надеюсь, это поможет.

+0

Не могли бы вы посмотреть на вопрос в ссылке: - [link] (http://stackoverflow.com/q/38036106/6442608) – amsquareb

Смежные вопросы