【问题标题】:Java classes and java error "cannot find symbol"Java 类和 java 错误“找不到符号”
【发布时间】:2020-01-20 19:07:04
【问题描述】:

你能解释一下吗?为什么我会收到此错误消息?

我输入了这个代码:

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类的链接可以分配Cat的值,没关系。

【问题讨论】:

  • attackTargetCat 类的一个方法。您的变量barsik 的类型为Animal,它没有定义为具有这样的方法,因此Java 无法解析它。 barsik 将在运行时引用 Cat 对象这一事实无关紧要。将barsik 声明为Cat 类型,它将起作用。
  • 非常感谢大家!我现在明白了。

标签: java class oop inheritance


【解决方案1】:

你引用的是 Animal 来创建 barsik 和 anfis 对象,但你没有在这个类中实现 attackTarget() 方法。如果你想使用 Cat 类中的 attackTarget 方法,你应该将 barik 对象引用到 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);

    }

}

【讨论】:

    【解决方案2】:

    您的代码有很多问题。您没有定义所有函数,而是在类中定义一个类(您可以这样做,但它非常先进,您可能不想这样做)。看看在 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 和 barik 都可以访问 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());
    
    }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-17
      • 1970-01-01
      • 2013-05-20
      • 2013-12-06
      • 2016-07-22
      • 2013-11-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多