Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 继承中出现必需错误和错误_Java_Inheritance_Window_Required - Fatal编程技术网

Java 继承中出现必需错误和错误

Java 继承中出现必需错误和错误,java,inheritance,window,required,Java,Inheritance,Window,Required,嗨,我在如何正确使用super()关键字方面遇到了麻烦。解释起来有点困难,请尽量理解 所以我有一个名为“Window”的类,它是另一个名为“Room”的类的子类 这是一个带构造函数的房间类 public class Room { private Position position; private Color color; public Room(Position pos, Color colour){ this.position = pos; th

嗨,我在如何正确使用super()关键字方面遇到了麻烦。解释起来有点困难,请尽量理解

所以我有一个名为“Window”的类,它是另一个名为“Room”的类的子类

这是一个带构造函数的
房间

public class Room {

private Position position;

private Color color;

    public Room(Position pos, Color colour){
        this.position = pos;
        this.color = color;
    }
}
所以我想给门一个color
color.RED
Window对象是用一个输入位置参数构造的

到目前为止,我得到的是:

public class Window extends Room{

private Color color;

    public Window(Position position, Color color) {
        super(position, color);
        this.colour = Color.RED;
    }
然而,在我的其他类中,有一些代码只使用一个位置参数创建一个新的
窗口

这是
示例
代码

public class example{
private Window   window;
private Position position;

public example() {

}

@Before
public void create() {
    position = new Position(4,3);
    window = new Window(position);
}
因此,它变成了
必需的
发现的
错误,告诉我长度不正确。我明白错误告诉我的是什么


这是我的问题。如何重做
窗口
构造函数,使其满足超级类和其他类的要求,而不改变这些类。

在窗口中创建新构造函数并设置默认颜色

public Window(Position position) {
        //Set default color
        super(position, Color.RED);
        this.colour = Color.RED;
    }

将另一个构造函数添加到
窗口
类:

public class Window extends Room {

    public Window(Position position) {
        super(position, null);
    }

或者,定义传递的默认颜色,而不是
null

为什么
Window
有一个字段
color
,而它的超类
Room
也有一个字段
color
?你怎么知道这两种颜色指的是哪一种?第二,这可能会引起混淆:当B是a的一个子类时,你通常可以说“B是a”。但在你的事业中,窗户是房间的一个子类。除非你不能说“窗户就是房间”。您可能在此处使用了错误的OO构造。请注意,
Window
不应从
Room
继承。看见