在Java中扩展另一个类的类中具有两个具有相同名称的变量

前端之家收集整理的这篇文章主要介绍了在Java中扩展另一个类的类中具有两个具有相同名称的变量前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
以下是我的项目代码的一部分:
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 mass) {
        super(x,y);
        this.mass = mass;
    }
}

谢谢你的时间

解决方法

在某种意义上,你是超级超级类的领域.但是,由于没有字段的超载,您会意外地进行更容易(只有一个给定名称的变量,类型无关紧要).这被称为变量“隐藏”或“阴影”.所以,你是对的,你会得到两个同名的字段.

你的第二个例子是正确的.它们是从超级类继承的,因为它们不被声明为私有的,它们对于子类是可见的.直接引用超级类的字段通常是不好的做法,除非有很好的理由,否则应该声明为私有的.调用超级构造函数的例子是最好的方法.

另外,如果你用另外一个名字隐藏一个字段,你仍然可以将它们称为super.x,super.y,而不是this.x,this.y,如果可以的话你应该避免这种情况.

原文链接:https://www.f2er.com/java/123142.html

猜你在找的Java相关文章