当前位置: 首页 > 面试题库 >

一个类中有两个具有相同名称的变量,这些变量扩展了Java中的另一个类

傅涵忍
2023-03-14
问题内容

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

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.x,super.y和this.x,this.y,因此应尽可能避免这种情况。



 类似资料:
  • 我在类SpawnManager中声明了一个私有int tree_count。void Start()和void Update()按照预期使用了该变量,但另一个方法public void tree_destroy似乎使用了不同的tree_count。 这是我的代码。

  • 问题内容: 我正在尝试将输入字段的值绑定到变量。我不知道这个变量的名字 是先验的 ;它存储在另一个变量中。 这是html: 这是控制器: 我也 弄了个小提琴。 这是行不通的,因为当前绑定是在输入字段和变量之间。相反,我将输入字段绑定到变量,该变量的名称存储在变量中(在本例中为)。 可能吗? 怎么样? 问题答案: 是的,有可能。我不明白您为什么要这样做,但是我可以告诉您如何做。我无法启动小提琴,但是

  • 我已经编写了这个预期输出的代码: 输入样本: 输入乘客姓名:Priya 输入性别(M或F/m或f):F 输入年龄:61 请输入票号:140 输入票价:500.0 示例输出1: 票号:143 乘客姓名:Priya 一张票的价格: 500.0 总金额: 375.0 我必须根据我所写函数的年龄和性别来更改总量值。 我的代码: Person.java BusTicket.java TestMain.jav

  • 假设您有2个包,并且有名为-Test的公共类。 第一个包。测试 第二包测试 它们中的每一个都有实例变量-x。 在第一种情况下-int x=2; 在第二种情况下-int x=3; 我想导入FirstPackage。在第二个包内测试。测试并打印值为2的x。 我的代码: 但是输出是3。如何打印?

  • 我的主课有两个班(我们称它们为classA和classB)。 是否有机会在classB中设置classA变量? 诸如此类: 非常感谢!问候

  • 问题内容: 我正在尝试使用RSA 7.5和Websphere 7服务器开发IBM JAX_WS Web服务。因为我是一个初学者,所以我遵循Java类优先方法,即首先创建Java类,然后生成WSDL文件。 当我尝试创建wsdl文件时,出现异常: java.security.PrivilegedActionException:com.sun.xml.internal.bind.v2.runtime.I