【发布时间】:2011-05-12 00:52:41
【问题描述】:
让下面的代码:
public abstract class MySuperClass {
public abstract void update();
/* ... */
}
public class A extends MySuperClass {
@Override
public void update() { /* ... */ }
/* ... */
}
public class B extends MySuperClass {
@Override
public void update() { /* ... */ }
/* ... */
}
public class Ticket<T extends MySuperClass> {
private Class<T> c;
public Ticket(Class<T> c){ this.c = c; }
public Class<T> getClass() { return this.c; }
public void update() { /* HOW TO DO! */ }
/* ... */
}
public class Main {
public static void main(String[] args) {
Ticket<A> myTicket1 = new Ticket<A>(A.class);
Ticket<B> myTicket2 = new Ticket<B>(B.class);
myTicket1.update();
myTicket2.update();
}
}
如何根据他的类型(A、B)等升级票证?
【问题讨论】:
-
您不再喜欢金属/木材/汽车的类比了吗? ;)
-
我查看了另一个被引用的问题,aioobe 是对的。在这两种情况下,您似乎都缺少一些继承的概念。为了进行更新,我只需要访问
MySuperClass对象。不管是A还是B,Java 都会使用update()实现。
标签: java generics reflection inheritance