gpt4 book ai didi

java - 在java中重写构造函数

转载 作者:行者123 更新时间:2023-12-04 17:59:45 24 4
gpt4 key购买 nike

你好,我有一个用 Java 绘制星星的类,它就像一个魅力。在此之后,我扩展了 Star 类以创建另一个具有扩展可能性的星星(在这种情况下,颜色必须不同)

出于某种原因,在我的面板中,当我调用类并为构造函数提供参数时,只有子类颜色似乎有效。

这是我的代码

    public class Star {

protected int radius;
protected int xmiddelpunt;
protected int ymiddelpunt;
protected static Color color;

public Star(int radius, int x, int y, Color color) {
xmiddelpunt = x;
ymiddelpunt = y;
this.radius = radius;

this.color = color;
}

}

和扩展类

    public class StarRed extends Star {

protected int x, y;
protected static Color color;

Random red = new Random();

public StarRed(int radius, int x, int y, Color color) {
super(radius, x, y, color);

this.radius = radius;
this.x = x;
this.y = y;
this.color = color;
}
}

我的面板类的构造函数如下:

    ArrayList<Star> stars = new ArrayList<Star>();
ArrayList<StarRed> rs = new ArrayList<StarRed>();

public HeavenPanel() {

setBackground(Color.blue); // geef het paneel een blauwe kleur


this.addMouseWheelListener(this); // set de mouselistener


for(int i = 0; i < 10; i++) {
stars.add(new Star (r.nextInt(30 + 50), r.nextInt(10 + 701), r.nextInt(10 + 701), Color.yellow));
}

for(int k = 0; k < 10; k++) {
rs.add(new StarRed(40, r.nextInt(30 + 50), r.nextInt(30 + 50), Color.red));
}

}

最佳答案

第一个问题:

protected static Color color;

这意味着该字段(您有两个...)在整个类型中共享。我原以为这是一个实例场,所以不同的星星可以有不同的颜色。相反,所有的星星都是相同的颜色,除非你在 StarRed 中有一些使用 color 字段的代码,在这种情况下你可能有 两个 星星的颜色……但还是不对。

第二个问题:您的 StarRed 类为 xycolor 声明了它自己的字段,尽管它们也在父类(super class)中被声明。然后,您将设置父类(super class)的 radius 字段的值,尽管该值已在父类(super class)构造函数中设置。

目前基本上都有些困惑。您应该弄清楚哪些信息与类型相关联而不是任何特定实例(在这种情况下应该是静态字段)以及哪些信息与单个实例相关联(在这种情况下应该是实例字段)。您几乎应该永远不要在子类和父类(super class)中使用相同的字段名称 - 我个人建议将所有字段设为私有(private)(可能常量除外)。

最后,为什么 StarRed 构造函数想要采用 Color?它不应该一直是红色的吗?

关于java - 在java中重写构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13722488/

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