我觉得我对 Java 中的继承有很好的理解,但我正在为以下情况而苦苦挣扎:
public class SuperClass {
private String name;
private int age;
public SuperClass(String name, int age) {
this.name = name;
this.age = age;
}
public void sharedMethod() {
System.out.println("I'm a shared method in the SuperClass");
}
}
public class SubClass extends SuperClass {
public SubClass(String name, int age) {
super(name, age);
}
public void sharedMethod() {
System.out.println("I'm a shared method in the SubClass");
}
public void subMethod() {
System.out.println("I'm subMethod");
}
}
public class Main {
public static void main(String args[]) {
SuperClass test = new SubClass("Laura", 30);
test.sharedMethod();
test.subMethod(); // causes an error
}
}
我主要是在努力理解使用 SuperClass test = new SubClass("Laura", 30);
时这里实际创建的是什么(这似乎只在 SubClass
extends SuperClass
- 没有 Casting 怎么可能?)。
我不明白的原因是因为我可以调用 sharedMethod
打印出 SubClass
方法的文本(所以大概是 SubClass
在这个实例中覆盖了 SuperClass
方法),但是我根本无法从 SubClass
调用 subMethod
。抱歉,如果我没有很好地表达出来,我似乎无法理解所引用的内容,可以使用哪些方法,为什么要这样做,为什么 SubClass
覆盖一个方法,如果该方法是共享的,但不能以其他方式调用。
最佳答案
通过 SuperClass test = new SubClass("Laura", 30)
,您创建了一个 SubClass
实例,但由 SuperClass
引用它。
在编译阶段,编译器发现 SuperClass
没有方法 subMethod
,所以会出现编译错误。
在运行时,JVM发现test
其实是一个SubClass
,所以SubClass
的sharedMethod
:
public void sharedMethod() {
System.out.println("I'm a shared method in the SubClass");
}
将被执行。
关于java - 试图理解 Java 中的继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50088016/