假设我有一个类SuperClass
,它仅存储不同的对象。它应该包含它存储的对象数量,并按某种类型的列表顺序存储这些对象(当前正在考虑使用数组或ArrayList
,但是我愿意改变它)。
然后,我想创建仅存储一定数量对象的子类。例如,我可能有SubClassA
,SubClassB
和SubClassC
,它们分别带有2、3和2个对象。我认为正确的方法是将每个子类作为public static int
存储的对象数。
但是,我不想为每个子类编写新的构造函数,因为会有很多这样的子类。同样,它们都遵循相同的模板:采用给定数量(static int
)的对象并将它们存储在列表中。用Java可以做到吗?
很明显,我不愿意修改类结构,因为我需要对类主体之外的每个类应用不同的规则。如果没有办法设计多个子类采用相同数量的参数(例如SubClassA
和SubClassC
不能同时存在),那么我将接受一个不允许重复的解决方案参数数量。 (希望我可以做类似SubClassA
扩展SubClass<2 args>
和SubClassC
扩展SubClass<2 args>
的操作。如果没有,我想我将存储另一个数据成员来标识对象,但这太不优雅了。)
答案 0 :(得分:0)
使用SuperClass
构造函数来使protected
抽象,该构造函数采用对象数组或vararg。
然后让每个子类声明一个构造函数,该构造函数精确接受其支持的对象数量。不需要public static int
常量。
示例
public abstract SuperClass {
private final Object[] objs;
protected SuperClass(Object... objs) {
this.objs = objs;
}
public int size() {
return this.objs.length;
}
public Object get(int index) {
return this.objs[index];
}
// Other methods
}
public final class SubClassA extends SuperClass {
public SubClassA(Object obj1, Object obj2) {
super(obj1, obj2);
}
// Other methods
}
public final class SubClassB extends SuperClass {
public SubClassB(Object obj1, Object obj2, Object obj3) {
super(obj1, obj2, obj3);
}
// Other methods
}