2011-04-20 134 views
0

可以說,C類和d擴展延伸的A類泛型方法和繼承Java中

我在E類一個方法,我希望能夠爲使用對象C或對象d B類。我知道A類提供了我需要的所有方法。我該如何去編寫一個方法,讓我傳遞一個對象C或對象D作爲參數?

我在想我需要做一個泛型類嗎?如果是的話,是否有人有更接近於我所需要的this的具體例子,這似乎只告訴我如何使用現有的集合類?

回答

6
class A { 
    public String hello(){return "hello";} 
} 
class B extends A{} 
class C extends B{} 
class D extends B{} 

方法hello在所有子類B,C和D

可用所以在E,這樣做:

private void test() { 
    System.out.println(hello(new A())); 
    System.out.println(hello(new B())); 
    System.out.println(hello(new C())); 
    System.out.println(hello(new D())); 
} 

public String hello(A a) { 
    return a.hello(); 
} 

,你可以通過A,B的情況下, C或D

順便說一句 - 這種情況下沒有必要使用泛型(據我所知)

+0

哦,那實際上我已經設置好了,很酷。我不在我可以測試代碼的階段,所以只是想檢查一下。謝謝 – tgrosinger 2011-04-20 15:28:25

2

如果CDA作爲他們的共同ancestror和A提供了所有需要的方法,那麼你的方法應該簡單地採取的A實例作爲參數。除非我誤解了你的問題,否則你不需要通用的方法。

1
public void doSomething(A input) { 
    input.methodInA(); 
    input.secondMethodInA(); 
    ... 
} 

多態性將運行在C或d的可能重寫代碼來實現,你不需要做的比調用該方法的任何其他。

0
class A { 

} 

class B extends A { 


} 

class C extends B { 


} 

class D extends B { 

} 

class E { 

    public void test (A a) { 
     // c or d will work fine here 
    } 

}