假设有以下现有类:
并允许类似以下的语句:
class A {
public void foo() { ... };
...
}
class A1 extends A { ... };
class A2 extends A { ... };
...
class A1000 extends A { ... };
现在,我们需要创建每个Axx类的一个变体,覆盖“foo”方法。基本思路是:
class B<T extends A> extends T {
@Override public void foo () { ... };
}
但似乎不可能从它们参数化的类型中继承一个类。
目标是避免需要遵循以下新代码:
class B1 extends A1 { @Override public void foo() { ... }; };
class B2 extends A2 { @Override public void foo() { ... }; };
....
class B1000 extends A1000 { @Override public void foo() { ... }; };
并允许类似以下的语句:
...
B<A643> b643 = new B<A643>;
b643.foo();
...
有什么提示吗?
非常感谢。
T
,因此完全可以将其从代码中删除。另外,如果T
真的是一个形式化的类型参数,那么B extends T
是无效的。 - scottbfoo
的实现方式来扩展任何给定类型的通用方法。例如,A1
、A2
、...、A1000
是完全(或大部分)不相关的,每个都有自己的方法,而B1
、B2
、...、B1000
同样是不相关的,每个都具有与其Annn
对应项相同的方法,以及这个通用的foo
实现(可能是重写或使用A
的受保护成员)。 - TheHans255