假设
abstract class A {
protected abstract f(): void;
}
class B extends A {
public f() { return 'B'; }
}
class C extends A {
public f() { return 'C'; }
}
,我想要一个包含B
和C
的数组。可以通过以下方式完成:
let arr: Array<B | C> = [/* lots of objects */];
arr.forEach(item => item.f());
在这里,我想使Array<B | C>
更灵活,更通用,以使其成为Array</*descendent of A*/>
。
有人可以给我个建议吗?
答案 0 :(得分:3)
您可以仅使用A
作为数组项。如果您计划从类外部对派生类型进行调用,则f
应该是公开的,对要保护的抽象成员没有任何限制:
abstract class A {
public abstract f(): string;
}
class B extends A {
public f() { return 'B'; }
}
class C extends A {
public f() { return 'C'; }
}
let arr: Array<A> = [/* lots of objects */];
arr.forEach(item => item.f());