Mra*_*dar 4 java oop polymorphism
我刚开始从书头开始学习面向对象编程java.It说多态使我能够创建一个超类类型的数组,然后将所有子类作为数组元素.但是当我尝试使用相同的代码编写代码时原则它遇到了错误,error: cannot find symbol
我说
我的类是超类是动物,而狗类扩展了动物类,它有自己的fetch方法,但是当我将dog变量引用为动物时,它在这里不起作用是代码
动物类
public class animal{
String family;
String name;
public void eat()
{
System.out.println("Ghap Ghap");
}
public void roam()
{
System.out.println("paw paw");
}
}
Run Code Online (Sandbox Code Playgroud)
狗班
public class dog extends animal{
public void fetch(){
System.out.println("Auoooooooo");
}
}
Run Code Online (Sandbox Code Playgroud)
测试者班
public class tester{
public static void main(String args[]){
animal doggie = new dog();
doggie.fetch();
doggie.eat();
doggie.roam();
}
Run Code Online (Sandbox Code Playgroud)
}
错误
tester.java:4: error: cannot find symbol
doggie.fetch();
^
symbol: method fetch()
location: variable doggie of type animal
1 error
Run Code Online (Sandbox Code Playgroud)
使用多态时,如果创建子类的实例并将其引用存储在超类类型的变量中,则只能在新创建的实例上调用那些存在于超类中的方法.
在你的代码中,你创建了一个dog类的实例并存储了doggie它的类型animal(超类狗)的引用,在这种情况下,你不能调用dog类中不可用的类实例上的任何方法animal.
fetch方法没有在animal类中定义,因此您得到错误.
解
fetch在animal类中定义方法
要么
更改
animal doggie = new dog();
Run Code Online (Sandbox Code Playgroud)
至
dog doggie = new dog();
Run Code Online (Sandbox Code Playgroud)
您正在引用doggie.fetch()但这不是 Animal 中定义的方法。
由于您将doggie对象用作动物,因此无法使用此方法。
如果您想使用该方法,您可以执行诸如实例检查之类的操作:
if(doggie instanceOf dog){
((dog)doggie).fetch();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
216 次 |
| 最近记录: |