如果子类没有构造函数,通过第三个类(不扩展抽象类)如何管理抽象类的子类?

10 浏览
0 Comments

如果子类没有构造函数,通过第三个类(不扩展抽象类)如何管理抽象类的子类?

我对这个任务感到非常困惑。考虑到抽象类的实例可以通过使用它们的子类来管理,我被给了一个 UML 图,并且它说我有一个带有参数的抽象类 Room,其中包含一个具体方法和私有字段 length 和 width。类 Flat 继承了这个抽象类,但 Flat 没有构造函数。另一个名为 Building 的类用来通过数组 Room allRooms[] 管理所有 Room 对象。\n所以写完这个之后,我觉得除了继承 Room,这两个类之间没有真正的关联...\n因为 Room 包含私有字段并且是一个抽象类,所以我无法弄清楚如何在没有类之间真正连接的情况下使用它们。\n那么:我如何通过 Building 访问 Flat,如果除了抽象类中的构造函数之外没有其他构造函数,我如何实例化 Flat。\n不过,也许有一个我从未听说过的继承和关联的特殊概念,如果有的话,我会非常高兴有人能用简单的英语向我解释一下。

0
0 Comments

在Java中,无法直接实例化一个抽象类,因此如果子类没有构造函数,无法通过第三个类来管理抽象类的子类。这是因为根据Java的规范,子类必须调用父类的构造函数来初始化父类的实例变量。如果子类没有自定义的构造函数,则默认会调用父类的无参构造函数。如果父类是抽象类且没有无参构造函数,那么子类将无法正确初始化。

解决这个问题的方法是在父类中添加一个无参构造函数或者在子类中创建一个构造函数来调用父类的有参构造函数。这样子类就可以正确初始化父类的实例变量。

以下是一个示例代码,展示了如何通过一个第三个类来管理一个没有构造函数的抽象类的子类:

public abstract class AbstractClass {
    protected int value;
    public AbstractClass(int value) {
        this.value = value;
    }
    public abstract void printValue();
}
public class SubClass extends AbstractClass {
    public SubClass(int value) {
        super(value);
    }
    public void printValue() {
        System.out.println("Value: " + value);
    }
}
public class ThirdClass {
    private AbstractClass subclass;
    public ThirdClass(int value) {
        subclass = new SubClass(value);
    }
    public void printValue() {
        subclass.printValue();
    }
}
public class Main {
    public static void main(String[] args) {
        ThirdClass thirdClass = new ThirdClass(10);
        thirdClass.printValue();
    }
}

在这个示例中,抽象类`AbstractClass`具有一个有参构造函数,并且定义了一个抽象方法`printValue()`。子类`SubClass`继承了抽象类,并在构造函数中调用了父类的构造函数来初始化父类的实例变量。第三个类`ThirdClass`通过创建子类的实例来管理抽象类的子类。在`ThirdClass`中,可以调用子类的方法来访问和操作子类的实例变量。

通过这种方式,我们可以通过一个第三个类来管理一个没有构造函数的抽象类的子类,从而实现对子类的管理和操作。

0