我对这项任务感到非常困惑。知道可以使用它们的子类来管理抽象类的实例时,请考虑以下事项:给了我一个UML,它说我有一个抽象类Room
,该类具有带参数和具体方法的构造函数。 Room
还包括专用字段length
和width
。类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
但是,也许有一个我从未听说过的特殊的继承和关联概念,如果这样的话,如果有人能用简单的英语向我解释它,我将非常高兴。
答案 0 :(得分:0)
能否请您分享编写代码所依据的UML图或描述。
据我所知,由于以下原因,在Java中如何尝试实现此目标是不可能的: 1)如果您为父类创建了构造函数,则子类必须具有这样的构造函数:
public class Flat extends Room {
public Flat(float length, float width) {
super(length, width);
//some work
}
}
或者您可以执行以下操作: