为什么下面的代码给出错误?
问题描述:
我想了解继承,并且遇到了这个问题。为什么下面的代码给出错误?
下面是代码:
import java.util.*;
class Parent
{
void show()
{
System.out.println("show from parent");
}
}
class Child extends Parent
{
public static void main(String s[])
{
Parent p=new Child();
p.show();
p.display();
}
void show()
{
System.out.println("show from child");
}
void display()
{
System.out.println("display from child");
}
}
和错误是:
G:\javap>javac Child.java
Child.java:15: error: cannot find symbol
p.display();
^
symbol: method display()
location: variable p of type Parent
1 error
如果我能够访问show()
那么为什么我不能够访问display()
知道display()
继承并且还存在于类别定义Child class.
答
你必须了解运行时间类型和编译时间类型。
在运行时,变量p
保存对Child
实例的引用。因此调用show
方法将运行Child#show
中的代码,因为这会覆盖方法Parent#show
。
在编译时,编译器只能知道声明的类型的变量。这是Parent
。因此,编译器只能访问Parent
类型的字段和方法,但不能访问Child
类型的字段和方法。
display
方法根本没有在Parent
中声明,因此是错误的。
答
Display()方法不在父类中。 t是错误的。你是访问父类的显示方法不是子类。如果你正试图访问父类中的方法,你不需要子类中的方法
答
如果你想调用客户端的显示方法,那么你必须创建子类的对象。 例如。 小孩=新小孩();
否则你需要在父类中编写显示方法。
规则是父类不能调用子成员的引用。
'display()'在父类中不存在... – Li357
请参阅'p'的基类型。 – Satya