gpt4 book ai didi

java - 了解继承和关键字 "extends"

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:12:01 24 4
gpt4 key购买 nike

我是初学者,目前正在阅读继承和多态性。我对关键字“扩展”以及构造函数的调用方式有些困惑。这是代码:

public class Test {
public static void main(String[] args) {
new B();
}
}

class A {
int i = 7;

public A() {
System.out.println("i from A is " + i);
}

public void setI(int i) {
this.i = 2 * i;
}
}

class B extends A {
public B() {
setI(20);
System.out.println("i from B is " + i);
}

public void setI(int i) {
this.i = 3 * i;
}
}

我知道通过在第 3 行调用 B(),会调用 A 类的构造函数,然后调用 B 的构造函数(是吗?),因此它显示“i from A is 7”然后“i from B is 60"。但是有人可以解释一下这个的重要性吗?为什么 B 中的 int i 与 A 中的 in i 完全不同?同样,我在遵循 new B() 行之后的代码“路径”时遇到了问题。如果有人可以在调用 B() 后解释每个步骤,那将不胜感激。

最佳答案

I'm having trouble following the "path" of the code after the line new B(). If someone could explain each step after B() is invoked, that would be much appreciated.

当调用 new B() 时,从技术上讲,流程首先进入构造函数 B()。 Java 中的构造函数总是需要(最终)链接到更高的构造函数(递归直到达到最高类 Object)。链接由 super(...)this(...) 语句表示为构造函数的第一条语句。如果没有明确写入,则假定为无参数 super()。所以,B() 实际上编译就像这样写:

  public B() {
super();
setI(20);
System.out.println("i from B is " + i);
}

现在你可以清楚地看到 new B() 调用 B()A() (它调用 println 并退出),然后是 setI,最后是 println

Why is int i in B completely different from in i in A?

i 是完全相同的字段。区别在于您在两个打印输出之间调用了 setI(20),从而更改了 i 的值。如果您删除对 setI 的调用,您会看到该值仍然是 7

关于java - 了解继承和关键字 "extends",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18751932/

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