public class geometri_tringel {
public static void main(String[] args) {
Robot amigo = new Robot("Амиго");
Robot enemy = new Robot("Сгибальщик-02");
doMove(amigo, enemy);
doMove(amigo, enemy);
doMove(enemy, amigo);
doMove(amigo, enemy);
doMove(enemy, amigo);
doMove(amigo, enemy);
doMove(enemy, amigo);
doMove(amigo, enemy);
}
public static void doMove(AbstractRobot robotFirst, AbstractRobot robotSecond) {
BodyPart attacked = robotFirst.attack();
BodyPart defenced = robotFirst.defense();
System.out.println(String.format("%s атаковал робота %s, атакована %s, защищена %s",
robotFirst.getName(), robotSecond.getName(), attacked, defenced));
}
}
class Robot extends AbstractRobot{
public String name;
public Robot(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
interface Defensable {
BodyPart defense();
}
final class BodyPart {
final static BodyPart LEG = new BodyPart("нога");
final static BodyPart HEAD = new BodyPart("голова");
final static BodyPart ARM = new BodyPart("рука");
final static BodyPart CHEST = new BodyPart("грудь");
private String bodyPart;
private BodyPart(String bodyPart) {
this.bodyPart = bodyPart;
}
@Override
public String toString() {
return this.bodyPart;
}
}
interface Attackable {
BodyPart attack();
}
abstract class AbstractRobot implements Attackable, Defensable{
public static int hitCount;
public BodyPart attack() {
BodyPart attackedBodyPart = null;
hitCount = hitCount + 1;
if (hitCount == 1) {
attackedBodyPart = BodyPart.ARM;
} else if (hitCount == 2) {
attackedBodyPart = BodyPart.HEAD;
} else if (hitCount == 3) {
attackedBodyPart = BodyPart.CHEST;
} else if (hitCount == 4) {
hitCount = 0;
attackedBodyPart = BodyPart.LEG;
}
return attackedBodyPart;
}
public BodyPart defense() {
BodyPart defencedBodyPart = null;
hitCount = hitCount + 2;
if (hitCount == 1) {
defencedBodyPart = BodyPart.HEAD;
} else if (hitCount == 2) {
defencedBodyPart = BodyPart.CHEST;
}else if (hitCount == 3) {
defencedBodyPart = BodyPart.LEG;
} else if (hitCount == 4) {
hitCount = 0;
defencedBodyPart = BodyPart.ARM;
}
return defencedBodyPart;
}
}
Артём Косенко
37 уровень
Не могу понять, почему в doMove не видно метод getName
Решен
Комментарии (3)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Roman Pryshchepa Java Developer Expert
29 января 2018, 08:40решение
https://javarush.com/help/2599
+2
Михаил
28 января 2018, 21:04решение
robotFirst и robotSecond принадлежат классу AbstractRobot. В классе AbstractRobot нет методов getName (как и говорилось в предыдущем комментарии). getName есть в классе Robot но, поскольку Robot является потомком AbstractRobot, а не наоборот, то метод getName не может быть вызван из AbstractRobot (из класса родителя нельзя вызывать методы класса потомка).
+4
Антон НикольскийExpert
28 января 2018, 20:27решение
robotFirst принадлежит классу AbstractRobot (согласно сигнатуре метода doMove). В AbstractRobot нет метода getName. Все логично.
+3