最近我的老师在谈论使用不同的构造函数来实例化对象。但我真的很困惑。为此,我想了解为什么会出现以下编译错误。
class SuperClass {
void superClass(){
System.out.println("superClass");
}
}
class SubClass extends SuperClass {
void subClass(){
System.out.println("subClass");
}
}
class Call {
public static void main(String args[]){
SuperClass s = new SubClass();
s.superClass();
}
}
当我编译并运行以下代码时,我得到了输出
superClass
但是当我尝试subClass()
通过s
对象调用时,出现以下错误。
damn.java:17: cannot find symbol
symbol : method subClass()
location: class SuperClass
s.subClass();
^
1 error
好的,根据这个,我可以假设即使我用不同的构造函数实例化对象,也只有指定的对象类型被加载到 RAM 中。
但是,当我像这样在这里使用覆盖时,
class SuperClass {
void superClass(){
System.out.println("superClass");
}
}
class SubClass extends SuperClass {
void superClass(){
System.out.println("subClass");
}
}
class Call {
public static void main(String args[]){
SuperClass s = new SubClass();
s.superClass();
}
}
我在调用的子类中得到方法。这让我真的很困惑。任何人都可以向我解释当我使用不同的构造函数来实例化对象时会发生什么。