加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-14 05:12:46 所属栏目: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
以下是我的项目代码的一部分:
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,如果可以的话你应该避免这种情况.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读