Суперкласс и подкласс Java - PullRequest
0 голосов
/ 18 ноября 2011

У меня есть суперкласс, называемый "BossCraft", который включает в себя метод void с меткой "move". У меня также есть класс, который расширяет BossCraft под названием SharkBoss, который также имеет пустой метод "move".

Можно ли как-нибудь вызвать метод SharkBoss "move" в метод более высокого BossCraft?

public class BossCraft
{
   public void move
   {
      //SharkBoss's move should go here
   }
}
public class SharkBoss extends BossCraft
{
   public void move
   {
      ...
   }
}

Ответы [ 6 ]

3 голосов
/ 18 ноября 2011

Да, super.move() (super. означает вызов (метод) суперкласса)

Если вы хотите сделать обратное - вызвать подкласс из суперкласса - это невозможно.Суперкласс не знает (и не должен знать) о существовании его подклассов.

Обратите внимание, что ваши определения синтаксически неверны - у вас должны быть квадратные скобки - move()

0 голосов
/ 18 ноября 2011

Вы можете просто привести к SharkBoss в методе перемещения суперкласса:

public class BossCraft {
   public void move(){
       //SharkBoss's move should go here
   SharkBoss s = (SharkBoss) this;
   s.move();
   }
}

Однако сам принцип использования подклассов заключается в том, что это должны быть односторонние отношения, суперклассы не должны знать об их подклассах. Я бы посоветовал вам провести рефакторинг.

0 голосов
/ 18 ноября 2011

Ты не должен этим заниматься.Весь смысл наследования заключается в том, что SharkBoss всегда является BossCraft, но BossCraft может быть или не быть SharkBoss.Методы на корабле SharkBoss должны применяться только к SharkBoss.

Если вы вызываете 'move' на SharkBoss, то будет вызвано движение SharkBoss без необходимости что-либо делать.

0 голосов
/ 18 ноября 2011

Да

BossCraft craft = new SharkBoss();
// Actually calls SharkBoss.nove
craft.move();
0 голосов
/ 18 ноября 2011

Если вы хотите вызвать метод parent, ключевое слово user super Если вы хотите вызвать метод child, я бы посмотрел на Абстрактные классы

0 голосов
/ 18 ноября 2011

use

super.move();

Он вызовет функцию move () своего родителя (т.е. своего экземпляра суперкласса)!

...