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

时间:2019-07-14 12:34:45

标签: java oop inheritance abstract

我对这项任务感到非常困惑。知道可以使用它们的子类来管理抽象类的实例时,请考虑以下事项:给了我一个UML,它说我有一个抽象类Room,该类具有带参数和具体方法的构造函数。 Room还包括专用字段lengthwidth。类Flat扩展了抽象类,但是Flat没有构造函数。另一个名为Building的类用于通过数组Room管理Room allRooms []的所有对象。

public abstract class Room {
   private float length;
   private float width;

   public Room(float length, float width) {
     this.length = length;
     this.width = width;
   }

   public calcSurface () {
     return this.length * this.width;
   }
}

public class Flat extends Room {
   ... 
   /* no constructor is intended here, not even methods are getting
      overriden in here */
   ...
}

因此,在写完这篇文章后,我认为,除了扩展Room之外,这两个类之间没有真正的联系...

public class Building {
   public Room allRooms[]; 
   ... 

public boolean addRoom (Room room) {
   ... // for loop 
   Room allRooms[i] = room; //so here are my passed object. but 
   since i can't instantiate an abstract class I usually would have 
   used the (sub)classes ==> = {new Flat(...)};
   ...
}

由于Room包含私有字段并且是一个抽象类,因此我无法真正弄清楚在类之间没有任何实际联系的情况下如何使用它们。

// method to calculate the surface of all rooms and flats
public float getSumOfRommsurface() {

}

public float getSurfaceOfFlats() {

}

所以:如果没有构造函数(抽象类内部的构造函数除外),如何通过Flat访问Building以及如何实例化Flat

但是,也许有一个我从未听说过的特殊的继承和关联概念,如果这样的话,如果有人能用简单的英语向我解释它,我将非常高兴。

1 个答案:

答案 0 :(得分:0)

能否请您分享编写代码所依据的UML图或描述。

据我所知,由于以下原因,在Java中如何尝试实现此目标是不可能的: 1)如果您为父类创建了构造函数,则子类必须具有这样的构造函数:

public class Flat extends Room {
    public Flat(float length, float width) {
        super(length, width);
        //some work
    }
}

或者您可以执行以下操作:

Can we instantiate an abstract class directly?