Java классов и java ошибка "не удается найти символ" - PullRequest
0 голосов
/ 20 января 2020

Можете ли вы объяснить мне, пожалуйста. Почему я получаю это сообщение об ошибке?

enter image description here

Я набрал этот код:

public class Animal {

    private int size = 0;
    private int health = 5;
    private int attackPoint = 2;
    public int getAttackPoint() {
        return attackPoint;
    }

public class Cat extends Animal {

    public void attackTarget (Animal target) {
        target.setHealth(target.getHealth() - this.getAttackPoint());
    }
}

class test {

    public static void main(String[] args) {
        Animal anfis = new Cat();
        Animal barsik = new Cat();

        anfis.setHealth(5);
        barsik.setHealth(5);

        barsik.attackTarget(anfis);
    }
}

Я думал, что ссылка класса Animal can присвоенное значение Cat и все в порядке.

Ответы [ 2 ]

0 голосов
/ 20 января 2020

Вы ссылаетесь на Animal для создания объектов barsik и anfis, но вы не реализуете метод attackTarget () в этом классе. Если вы хотите использовать метод attackTarget из класса Cat, вы должны ссылаться на объект barsik на Cat:

    Cat barsik = new Cat();

или реализовать этот метод в классе Animal:

public void attackTarget(Animal target) {
    // Code Here
}

Также, методы setHealth и getHealth не определено в классе Animal. Для этого:

public class Animal {

    private int size = 0;
    private int health = 5;
    private int attackPoint = 2;

    public int getAttackPoint() {
        return attackPoint;
    }

    public void attackTarget(Animal target) {
        // Code Here
    }

    public void setHealth(int healt) {
        // Code Here
    }

    public int getHealth() {
      return 0;
    }
}

А:

public class Cat extends Animal{

    public void attackTarget (Animal target) {
        target.setHealth(target.getHealth() - this.getAttackPoint());
    }
}

И:

public class test {

    public static void main(String[] args) {
        Animal anfis = new Cat();
        Animal barsik = new Cat();

        anfis.setHealth(5);
        barsik.setHealth(5);

        barsik.attackTarget(anfis);

    }

}
0 голосов
/ 20 января 2020

С вашим кодом много проблем. Вы не определяете все свои функции, вы определяете класс внутри класса (что вы можете сделать, но он достаточно продвинут, и вы, вероятно, не хотите этого делать). Посмотрите на следующее, что было сделано в Blue J:

public class Animal{

private int size = 0;
private int health = 5;
private int attackPoint = 2;

public int getAttackPoint() {
return attackPoint;
}
public void setHealth(int health){
this.health=health;
}

public int getHealth(){
return this.health;
}

}



public class Cat extends Animal {

public void attackTarget (Animal target) {
   target.setHealth(target.getHealth() - this.getAttackPoint());
}
}

/ * Обратите внимание, что и anfis, и barsik имеют доступ к методам Animal, но только barik имеет доступ к методам Cat. * /

class test {

public static void main(String[] args) {
Animal anfis = new Cat();
Cat barsik = new Cat();

anfis.setHealth(5);
barsik.setHealth(7);

System.out.println(barsik.getHealth());
System.out.println(anfis.getHealth());


barsik.attackTarget(barsik);

System.out.println(barsik.getHealth());

}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...