2009-11-17 121 views
1

我知道下面的代码不能编译,是的,我可能会疯了。我想要做的是将抽象类(A)的实现(B)放在类(C)的超类中,该类也扩展了抽象类。我还想推迟超类的方法覆盖。喜欢的东西...Java类级别类型推断

abstract class A { 
    abstract Object get(); 
    abstract Object do(); 
    Object action(); 
} 

class B extends A { 
    B(B obj) { 
     super(obj.getName()...) 
    } 
    Object get() { ... } 
    Object do() { ... } 
} 

C<T> extends <T extends A> { 
    C(<T extends A> obj) { 
     super(obj) 
    } 

    Object do() { ... } 

    Object whatever() { 
     return action(); 
    } 
} 

哪里..​​.

C aC = new aC(new B()); 
aC.get() -> B.get() 
aC.do() -> C.do() 
aC.action() -> A.action() 
+0

不,你不能像Java那样动态地定义你的类结构。如果你定义了一个接口,你可以使用组合来实现这一点,以及一个动态代理。但这依赖于反思,这可能会或可能不会成为问题。 – Yishai 2009-11-17 04:34:37

+0

是的,我考虑过这个。这有点牵扯,特别是因为仿制药就在那里。我会看看这样的事情是否即将到来。谢谢。 – cwall 2009-11-17 23:59:11

回答

1

我想你想使用委托模式。

class C extends A { 

    private final A delegate; 

    C(A obj) { 
     this.delegate = obj; 
    } 

    Object get() { return delegate.get() } 

    Object whatever() { 
     return action(); 
    } 
} 
+0

是的,这是我最终做的。谢谢。 – cwall 2009-11-18 00:00:59