在一个基类,我有一个变量实现为一个ArrayList:如何更改我的子类中的变量的实现?
class Base<E> {
List<Collection<E>> adj;
public Base (int size) {
adj = new ArrayList<Collection<E>>(size);
for(int i = 0; i < size; i++)
adj.add(new ArrayList<E>());
}
}
现在在子类中,我想改变执行到HashSet:
class Sub<E> extends Base<E> {
List<Collection<E>> adj;
public Sub (int size) {
adj = new ArrayList<Collection<E>>(size);
for(int i = 0; i < size; i++)
adj.add(new HashSet<E>());
}
}
但它不会让因为它给了我一个“必须明确地唤起另一个构造函数”的错误。我该怎么办?
它初始化'adj'两次不好吗? – Duncan
是的,这是不好的。两次做不好的事情表明设计不好。只需在基础中提供一个空的“受保护的”无参数构造函数。 也没有必要重新声明“adj”,只要确保它在基地0123保持受保护 –
其实“不需要”一定是我迄今为止阅读过的最大轻描淡写。隐藏一个成员是一个可能的错误情景,我只是想着它而不知所措。特别是不必要的,因为'Collection'将会除了哈希集合就好! –
Voo