gpt4 book ai didi

java - Java 类中的继承

转载 作者:行者123 更新时间:2023-12-03 01:55:07 24 4
gpt4 key购买 nike

class Foo {
int number;
public Foo(int x) {
number = x;
multiply();
}
public void multiply() {
number = 2 * number;
}
public int getNumber() {
return number;
}
}
class Bar extends Foo {
int number;
public Bar(int x,int y) {
super(x);
number = y;
multiply();
}
public void multiply() {
number = number * 3;
}
}
class Test {
public static void main(String args[]) {
Foo foo = new Foo(42);
Foo bar = new Bar(42,24);
System.out.println(foo.getNumber() + "\n" + bar.getNumber());
}
}

这段代码的输出是84和42,但无论我如何跟踪它,我最终都会得到84和72。谁能详细解释一下。

最佳答案

这是一个痕迹:

调用new Bar(42,4) :

42被传递到super构造函数。所以它执行的主体是:

public Foo(int x) {
number = x;
multiply();
}

number它使用的是它自己的number (Foo.number 是隐藏的),但是 multiply()它调用的是重写的。因此它调用:

public void multiply() {
number = number * 3;
}

但这指的是Bar.number ,现阶段仍然是0因为它还没有被初始化。所以它仍然是 0。numberFoo不受影响,因为那不是 number出现在这个版本的multiply中.

所以目前我们有 Foo.number 42 岁,和 Bar.number为 0。

我们接下来继续

    number = y;
multiply();

这会将 24 放入 Bar.number ,然后乘以 3。

但是getNumber()没有被覆盖。这意味着当您调用bar.getNumber()时你实际上会得到 number来自Foo在里面。也就是 42。

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

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