Java中的继承 - 2个类

时间:2014-10-29 00:34:44

标签: java inheritance

所以我有两个班级,一个名为“行星”的班级'另一个叫做“太阳报”。 sun类是父类,行星类是子类,这意味着这个类将继承sun类中的元素。我在访问和更改变量时遇到了问题我已在我的父类中初始化,我试图在子类中复制+修改。

Sun的变量: 大小,颜色

//This is what I've tried:

public class Planets extends Sun
{
    public Planets (Sun sunClass)
    {
        sunClass.size=10;
        sunClass.colour="BLUE";
    }
}

//This is what's in Sun class:
public class Sun
{
    public double size;
    public String colour;

    public Sun(double size, String colour)
    {
        this.size = size;
        this.colour = colour;
    }
}

假设涉及的其他课程包含更多细节但不是我所遇到的问题的一部分。

4 个答案:

答案 0 :(得分:1)

您似乎正在尝试错误地初始化继承的成员。在java中,您可以调用类的构造函数'使用超级构造函数的父类。

新构造函数:

public Planets () {
    super(10, "BLUE");
}

这将使用这些值调用Sun类的构造函数。

或者你可以通过Planet课程发送大小和颜色'构造:

public Planets(double size, String color) {
    super(size, color);
}

希望这有帮助!

答案 1 :(得分:0)

让我们忘记太阳是一颗恒星,而不是一颗行星。这里更重要的错误是继承通过从更通用的类派生更专业的类来工作。

所以你会:

public class Planet
{
    int size;
    String color;
    public Planet (int size, String color)
    {
       this.size=size; this.color=color;
    }
}

然后,Sun将成为一个专门的实例,即使它在技术上不是一个星球:

public class Sun extends Planet
{


    public Sun()
    {
       super(10, "BLUE");
    }
}

   public class Mars extends Planet
    {


        public Sun()
        {
           super(3, "RED");
        }
    }

答案 2 :(得分:0)

偶然的事情......首先,似乎缺乏对继承实际上是什么的理解。

在您的示例中,PlanetsSun延伸,这意味着Planets 拥有 Sun所做的所有属性,以及其他任何属性您已在Planets中定义。

如果您尝试在Planet内修改这些属性,则可以使用super(或this直接执行此操作,如果属性未被子类覆盖)。

考虑这些课程:

public class Sun
{
    public double size;
    public String colour;

    public Sun() {}

    public Sun(double size, String colour)
    {
        this.size = size;
        this.colour = colour;
    }
}

public class Planets extends Sun
{
    public Planets() {
        super(10.0, "Yellow");
    }
    public Planets (double size, String colour)
    {
        super(size, colour);
    }

    public void setSize(double size) {
        super.size = size;
    }
}

注意使用super来表示超类构造函数的使用。 setSize()中的Planets方法允许您在子类中设置超类属性的大小(但实际上,您可能不想使用此层次结构)

第二个问题是你对继承的使用似乎并不合乎逻辑。除了语法之外,决定是否使用继承(is-a)或组合(has-a)以及是否继承,通过问自己问题,使用哪个层次结构将变得更加容易:我的超类的所有子类本身都是超类吗?

答案 3 :(得分:0)

我们知道子类是从超类继承的类的名称,在本例中是超类。需要注意的一个事实是,超类可以拥有任意数量的子类,但没有限制,但是子类只能从一个超类扩展。

只是一张便条。