#java
#java
Вопрос:
У меня есть следующий объект типа Superman. Мне нужно, чтобы он вызывал метод дважды, один раз из класса Superman и один раз из ActionCharacter -parent. Как это сделать?
interface CanFight {void fight();}
interface CanFly {void fly();}
interface interface CanClimb{void climb();}
interface CanSwim{
void swimFast();
void treadH2O();
}
class ActionCharacter {
public void fight() {System.out.println("fight an ActionChar");}
}
class Superman extends ActionCharacter implements CanFight, CanFly, CanClimb, CanSwim{
String name = "Superman";
public void fight() {System.out.println("fight bad guys");}
public void fly() {System.out.println("fly faster than a bird");}
public void swimFast() {System.out.println("Swim faster than Michael Phelps");}
public void treadH2O() {System.out.println("Tread water forever");}
public void climb() {System.out.println("climb vertical cliffs");}
}
public class Action {
public static void t(CanFight x) { x.fight(); }
public static void v(CanFly x) { x.fly(); }
public static void w(ActionCharacter x) { x.fight();}
public static void x(CanClimb x) {x.climb();}
public static void y(CanSwim x) {x.swimFast(); x.treadH2O();}
public static void main(String[] args) {
Superman h = new Superman();
System.out.println("I am " h.name " I can do the following:" );
t(h); // Treat it as a CanFight
y(h);
v(h); // Treat it as a CanFly
x(h);
w(h); //This should print fight an ActionChar
ActionCharacter i = (ActionCharacter)h;
w(i); //Second attempt to print fight an ActionChar
}
}
Комментарии:
1. Используйте
super.fight()
для вызова метода суперкласса.2. В дополнение к комментарию @LppEdd вам следует прочитать, используя ключевое слово super .
Ответ №1:
определите метод в своем суперклассе ActionCharacter
и переопределите его в своем подклассе Superman
, чтобы оба объекта (тип Superman и тип ActionCharacter) могли использовать этот метод
Комментарии:
1. Я определил его в ActionCharacter и @Override в Superman. Я все еще получаю распечатку только от Superman.
Ответ №2:
Ключевое слово super в java является ссылочной переменной, которая используется для ссылки на объекты родительского класса
в классе Superman:
fight();
Для вызова из родительского ActionCharacter:
super.fight();
Комментарии:
1. У меня есть методы t, v, w, x, y, которые принимают объекты и вызывают этот объект предполагаемого метода. Даже в этом случае вызов public static void w(ActionCharacter x) { x.fight(); } не выводит родительский метод fight().