gpt4 book ai didi

java - 在扩展 Java 中另一个类的类中有 2 个同名变量

转载 作者:搜寻专家 更新时间:2023-10-30 21:02:40 24 4
gpt4 key购买 nike

以下是我的项目代码的一部分:

public class Body extends Point{
public double x, y, mass;

public Body() {
x = y = mass = 0;
}

public Body(double x, double y, double mass) {
this.mass = mass;
this.x = x;
this.y = y;
}
}

public class Point {
public double x;
public double y;

public Point(double x, double y) {
this.x = x;
this.y = y;
}
}

我很快意识到这样做会在 Body 类中创建名为 x 的两个变量,并在 Body 类中创建另外两个名为 y 的变量。这怎么可能,为什么 Java 甚至允许这样做?

我假设这是 Body 类的正确代码:

public class Body extends Point{
public double mass;

public Body() {
super();
mass = 0;
}

public Body(double x, double y, double mass) {
super(x,y);
this.mass = mass;
}
}

谢谢你的时间

最佳答案

从某种意义上说,您正在覆盖父类(super class)的字段。但是意外更容易做到,因为没有字段重载(您只有一个给定名称的变量,类型无关紧要)。这被称为变量“隐藏”或“阴影”。所以,你是对的,你最终会得到两个同名的字段。

你的第二个例子是正确的。它们是从父类(super class)继承而来的,因为它们没有声明为私有(private)的,所以它们对子类是可见的。直接引用父类(super class)的字段通常是不好的做法,除非有充分的理由,否则它们应该声明为私有(private)的。您调用 super 构造函数的示例是最好的方法。

另外,如果你用另一个同名的字段隐藏了一个字段,你仍然可以将它们称为 super.x、super.y,与 this.x、this.y 相比,你应该避免这种情况(如果有的话)可能的。

关于java - 在扩展 Java 中另一个类的类中有 2 个同名变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/772663/

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