gpt4 book ai didi

java - 试图理解 Java 中的继承

转载 作者:行者123 更新时间:2023-11-29 04:19:50 25 4
gpt4 key购买 nike

我觉得我对 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,所以SubClasssharedMethod:

public void sharedMethod() {
System.out.println("I'm a shared method in the SubClass");
}

将被执行。

关于java - 试图理解 Java 中的继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50088016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com