gpt4 book ai didi

java - 方法覆盖和继承

转载 作者:行者123 更新时间:2023-11-30 06:13:20 25 4
gpt4 key购买 nike

public class Circle {

public static final double PI = 3.141592654;
protected double radius;

public Circle(double radius) {
this.radius = radius;
}

@Override
public String toString() {
return "Class = " + getClass().getSimpleName() + " (radius = " + radius + ")";
}
}


public class PlaneCircle extends Circle {

private double centerX, centerY;

public PlaneCircle(double radius, double centerX, double centerY) {
super(radius);
this.centerX = centerX;
this.centerY = centerY;
}

@Override
public String toString() {
return super.toString();
}
}

假设以上两个类在不同的文件中。

当我创建 PlaneCircle 的实例(在另一个 java 文件中)时,如下两行...

PlaneCircle planeCircle1 = new PlaneCircle(3, 6, 7);
System.out.println(planeCircle1.toString());

我在控制台输出中得到的是

Class = PlaneCircle (radius = 3.0)

PlaneCircle 中的toString() 方法调用super.toString()toString()当我使用 getClass().getSimpleName() 时,Circle 中的方法应该给出“Circle”。

我的问题是,为什么在这种情况下输出是“PlaneCircle”而不是“Circle”,即使我已经创建了子类 (PlaneCircle) 的实例?这跟反射有关系吗?

最佳答案

planeCircle1PlaneCircle 的实例,这意味着 getClass() 将返回 PlaneCircle.class(即表示 PlaneCircle 类的 Class 实例)和 getClass().getSimpleName() 将返回该类的名称 - “PlaneCircle”。

从基类 Circle 的方法调用 getClass().getSimpleName() 并不重要,因为当您调用没有实例的方法时变量,您在当前实例上调用它(即 getClass()this.getClass() 相同,并且 this 是一个您的代码示例中的 PlaneCircle 实例)。

关于java - 方法覆盖和继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32039346/

25 4 0
文章推荐: javascript - 如何为多个选项卡处理一次服务 worker 消息?
文章推荐: java - 使用泛型时复合模式的可扩展性
文章推荐: javascript - 刽子手游戏中的增量字母
文章推荐: java - 如何从包含键 String 和 list 的 hashmap 中仅获取一个值