gpt4 book ai didi

java - Java 错误 :cannot find Symbol 中的多态性

转载 作者:搜寻专家 更新时间:2023-11-01 01:24:33 27 4
gpt4 key购买 nike

我刚开始从 head first java 书开始学习面向对象编程。它说多态性使我能够创建父类(super class)类型的数组,然后将所有子类作为数组元素。但是当我尝试编写代码时使用相同的原则遇到错误说错误:找不到符号我创建了类,父类(super class)是动物,狗类扩展了动物类,它有自己的获取方法,但是当我将狗变量引用为动物时,它在这里不起作用是代码

动物类:

public class animal{

String family;
String name;

public void eat() {
System.out.println("Ghap Ghap");
}

public void roam() {
System.out.println("paw paw");
}

}

狗类:

public class dog extends animal {
public void fetch() {
System.out.println("Auoooooooo");
}
}

测试类:

public class tester {

public static void main(String args[]){
animal doggie = new dog();
doggie.fetch();
doggie.eat();
doggie.roam();
}

}

错误:

tester.java:4: error: cannot find symbol
doggie.fetch();
^
symbol: method fetch()
location: variable doggie of type animal
1 error


编辑: 上次我问这个问题时我回家时认为对象 doggieanimal 类型并且它不知道 dog 类中声明的 fetch() 函数。但是添加行

System.out.println(doggie.getClass().getName()); 

给出 dog 作为类的类型,如果 dog 确实是类的类型,它不应该知道其中声明的方法?

最佳答案

使用多态性时,如果您创建子类的实例并将其引用存储在父类(super class)类型的变量中,您只能调用这些方法存在的新创建的实例上在父类(super class)中

在您的代码中,您创建了一个 dog 类的实例,并将其引用存储在类型为 animaldoggie 中(父类(super class)dog),在这种情况下,您不能在 dog 类实例上调用 animal 类中不可用的任何方法。

fetch 方法未在 animal 类中定义,因此会出现错误。

解决方案

要么在animal类中定义fetch方法

改变

animal doggie = new dog();

dog doggie = new dog();

关于java - Java 错误 :cannot find Symbol 中的多态性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54266858/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com