gpt4 book ai didi

java - 有人可以解释为什么我在运行程序时会得到这个吗? (简单的Java多态性)

转载 作者:行者123 更新时间:2023-12-01 13:22:21 25 4
gpt4 key购买 nike

所以,我在 Java 中有这 3 个类。当我运行该程序时,我得到:

20,
15,
10,

我的问题是,为什么我得到这个而不是:

15,
20 (doesn't public int getX(); in class B get us to 15+5=20?),
10

例如?

你能一步一步地向我解释一下这个程序中到底发生了什么吗,因为我对输出(和序列)非常困惑。

public class A {

private int x = 15;

public int getX() {
return x;
}

public void setX(int x) {
this.x = x;
}

public void printX() {
System.out.println(this.getX());
}

}

child :

public class B extends A {

private int x = 5;

@Override
public int getX() {
return super.getX() + x;
}

@Override
public void setX(int x) {
super.setX(x);
super.printX();
}

@Override
public void printX() {
System.out.println(super.getX());
}

}

public class C {

public static void main(String[] args) {
A a = new B();
System.out.println(a.getX());
a.setX(10);
a.printX();
}

}

最佳答案

发生这种情况是因为您实例化了 a作为B对象-A a = new B()a 的显式类型并不重要。是 A ;它比其真实类型更通用(抽象)B (因为 B 继承自 A ),因此多态性调用 B方法(更具体)按第一顺序排列。这同样适用于字段。

调用a.getX()后类B引用AgetX() ,返回其 15 (在本例中,父类(super class)方法没有对调用它的对象的引用),那么 5添加 ( Bx ),结果是 20 .

后续调用的行为方式类似。

关于java - 有人可以解释为什么我在运行程序时会得到这个吗? (简单的Java多态性),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21953122/

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