为了账号安全,请及时绑定邮箱和手机立即绑定

Java中的多态性错误:找不到符号

Java中的多态性错误:找不到符号

慕容森 2022-05-12 15:15:05
我刚从书头开始学习面向对象编程,首先是java。它说多态使我能够创建超类类型的数组,然后将所有子类作为数组元素。但是当我尝试使用相同的代码编写代码时原则它遇到错误,说 error: cannot find symbol 我将超类设为动物的类,而狗类扩展了具有自己的 fetch 方法的动物类,但是当我将狗变量引用为动物时,它在这里不起作用是代码动物类: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 symboldoggie.fetch();      ^symbol:   method fetch()location: variable doggie of type animal1 error编辑:上次我问这个问题时,我回家时认为该对象doggie属于该类型animal,并且它不知道fetch()已在dog类中声明的函数。但是添加行System.out.println(doggie.getClass().getName()); 给出dog作为类的类型,如果dog确实是类的类型,它不应该知道其中声明的方法吗?
查看完整描述

3 回答

?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

使用多态性时,如果创建子类的实例并将其引用存储在超类类型的变量中,则只能在新创建的实例上调用超类中存在的那些方法。

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

fetch类中未定义方法,animal因此您会收到错误消息。

解决方案

在类中定义fetch方法animal

或者

改变

animal doggie = new dog();

dog doggie = new dog();


查看完整回答
反对 回复 2022-05-12
?
MMMHUHU

TA贡献1834条经验 获得超8个赞

由于动物中不存在 fetch() 方法,因此会引发错误。你可以在 animal 中定义一个 fetch 方法并在 dog 类中覆盖它。



查看完整回答
反对 回复 2022-05-12
?
萧十郎

TA贡献1815条经验 获得超13个赞

您正在引用doggie.fetch(),但这不是动物中定义的方法。


由于您将doggie对象用作动物,因此不能使用此方法。


如果您想使用该方法,可以执行实例检查之类的操作:


 if(doggie instanceOf dog){

    ((dog)doggie).fetch();

 }


查看完整回答
反对 回复 2022-05-12
  • 3 回答
  • 0 关注
  • 194 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信