2012-07-11 116 views
43

有什麼辦法可以不是實現接口在繼承類中的所有方法嗎?沒有實現所有的接口方法。可能嗎?

+1

請參見http:// stackoverfl ow.com/questions/2294738/confusion-in-regarding-implementing-interface-methods?rq=1 – fvu 2012-07-11 16:26:31

+2

你的用例是什麼? – 2012-07-11 16:30:30

+0

關於[Interface Interregation Principle](https://realm.io/news/donn-felker-solid-part-4/) – AimanB 2016-04-29 03:30:03

回答

49

解決此問題的唯一方法是將您的課程聲明爲abstract,並將其留給子類以實施缺少的方法。但最終,鏈中的某個人必須實施它才能符合接口合同。如果你真的不需要特定的方法,你可以實現它,然後return或拋出一些NotImplementedException,哪一個更適合你的情況。

+4

我寫了一個後續問題。我一直只使用'Comparator'接口的'compare()'函數來使用'Arrays.sort()'對對象進行排序。但是現在我打開[Javadoc](https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html),我發現在那裏定義了更多的方法。那麼,我怎麼能做到這一點? – 2017-08-23 14:16:50

4

將該類定義爲abstract類。但是,當您想要創建它的實例(通過使用子類或匿名類)時,您必須實現這些未實現的方法。

3

如果你想要一個可實例化的類,這是不可能的。不過,您可以嘗試定義一個abstract類。

53

接口的一點是要保證對象將向外表現爲接口指定它將

如果不實現你的接口的所有方法,比你摧毀一個接口的全部目的。

+2

+1表示接口的合同性質 – fvu 2012-07-11 17:38:55

3

這是可能的,它很容易。我編碼了example

您所要做的就是繼承自實現該方法的類。如果你不介意一個不可實例化的類,那麼你也可以定義一個abstract類。

+0

這意味着它們已經實現。 – 2012-07-11 16:36:58

+1

@TonyHopkinson他們已經實施,但沒有在課堂上實施。 – emory 2012-07-11 16:40:34

+6

是的,但問題是如何不執行而不是如何實現其他地方。 – 2012-07-12 11:40:04

4

我問自己同樣的問題,然後瞭解了適配器。它解決了我的問題,也許它可以解決你的問題。這可以很好地解釋:https://blogs.oracle.com/CoreJavaTechTips/entry/listeners_vs_adapters

+2

儘管這個鏈接可能回答這個問題,但最好在這裏包含答案的重要部分,並提供供參考的鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 - [來自評論](/ review/low-quality-posts/18790848) – 2018-02-11 21:54:10

8

我們可以覆蓋abstract父類中的所有接口方法,並在子類中覆蓋那些只有該特定子類所需的方法。

接口

public interface MyInterface{ 
    void method1(); 
    void method2(); 
    void method3(); 
} 

抽象父類

public abstract class Parent implements MyInterface{ 
@Override 
public void method1(){ 

} 
@Override 
public void method2(){ 

} 
@Override 
public void method3(){ 

} 
} 

在你的子類

public class Child1 extends Parent{ 
    @Override 
    public void method1(){ 

    } 
} 




public class Child2 extends Parent{ 
    @Override 
    public void method2(){ 

    } 
} 
相關問題