所以我有两个班级,一个名为“行星”的班级'另一个叫做“太阳报”。 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;
}
}
假设涉及的其他课程包含更多细节但不是我所遇到的问题的一部分。
答案 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)
偶然的事情......首先,似乎缺乏对继承实际上是什么的理解。
在您的示例中,Planets
从Sun
延伸,这意味着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)
我们知道子类是从超类继承的类的名称,在本例中是超类。需要注意的一个事实是,超类可以拥有任意数量的子类,但没有限制,但是子类只能从一个超类扩展。
只是一张便条。