2012-10-12 160 views
1

這是我的方案在Java中:尋找繼承方案

interface I{} 
class A implements I{} 
class B extends A{} 

所以,現在這類需要實現該接口的I算法?如果A和B類共享實施會怎麼樣? 致以問候

回答

4

class A必須提供所有的實施,因爲它不是abstract。有關更多詳細信息,請參閱here

class B可以覆蓋任何/所有這些方法。

如果您A抽象(作爲一個階級),那麼它可以提供abstract方法在接口這些方法(基本上只是聲明爲abstract)和B將提供唯一的實現。

0

您只需要在A類中實現I接口。或者,您可以在B類中重寫該實現,但如果您不這樣做,那麼這兩個類的行爲方式都會相同(使用A實現)。

1

1)A類必須實現接口I的方法。

2)然而,如果需要,B類可以覆蓋這些定義。 3)如果類A沒有實現,則應聲明爲抽象類,在這種情況下,類B應該實現這些。

0

陳述implements你承諾類將實現一些接口。說明extends你允許自己重用基類的實現。 extends意味着implements

所以在你的情況下,你承諾A將實施I。接下來你承諾B也將實現I,但將使用A的實現作爲基礎。

因此,您的模式假設BA共享一些執行A作爲源。沒關係,如果這是你想要的。

你還可以:

1)在這種情況下B狀態class B implements I將在它自己的。

2)持有多數在一些第三類實現的,稱爲例如Base,像如下

interface I {} 
class Base implements I {} 
class A extends Base{} 
class B extends Base{} 

這樣AB將是平等的權利。

3)可以持有任意類和使用聚合實施和裝飾它:

interface I { 
    String method1(String a); 
    String method2(String a); 
} 
class ImplementationHolder1 // does not implement I! 
{ 
    String method1impl(String a) {}; 
} 
class ImplementationHolder2 // does not implement I! 
{ 
    String method2impl(String a) {}; 
} 

class A implements I { 
    ImplementationHolder1 h1; 
    ImplementationHolder2 h2; 
    String method1(String a) { 
     return h1.method1impl(); 
    }; 
    String method2(String a) { 
     return h2.method2impl(); 
    }; 
} 

記住,你應該讓abstract類如果沒有完全實現接口。

如果它不符合您的需要,您也可以覆蓋子孫類中的任何基類實現。