2009-11-17 88 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