【发布时间】:2015-11-30 01:43:33
【问题描述】:
class Person{
String name;
void show(){
System.out.println("I am parent");
}
}
class Student extends Person{
String dit;
void show(){
System.out.println("I am child");
}
}
public class NewClass {
public static void main(String[] args) {
Person p;
p = new Student();
p.name = "Kamal";
p.dit = "DIT/10/c1/1234"; // I'm not allowed to do this
p.show(); // Here in overriding child class method is called
}
}
我很困惑。据我了解,“p”变量无法访问 dit(即使它被分配了 Student),因为 p 的数据类型是 Person,它是父类。因此父类不能访问子类的属性和方法。但是在覆盖它调用子类方法时。
我是 Java 新手。请帮助我理解这一点。
【问题讨论】:
-
运行时多态性
-
这正是“覆盖”的意思
-
你需要了解的主要是变量
p是Person类型,而p引用的对象是Student类型。 -
如果你需要访问
p.dit,那么你应该声明Student p。并非每个Person都有dit,这就是编译器阻止您访问该属性的原因。
标签: java inheritance overriding