面向介面程式設計還有一些好處:

Ernset發表於2012-12-14

1.一個功能的呼叫者只需要關心如何使用此功能,而無須關注功能的實現。
如:如我們在main 方法中呼叫一個client程式,我們只需要Client client = new ClientImpl(),無論 ClientImpl 類中定義了多麼複雜的成員函式和成員變數(包括javadoc),你都看不到,你也無須看到。
2.面向介面程式設計便於團隊合作,有了統一的介面(介面是公開的,裡面的方法都是public的),無須擔心別人的程式無法使用我的實現(他根本就不關心)。假如我們團隊正在做一個計算器小程式,想要計算1+2+...+100=?,product manager 寫了一個介面,讓兩個員工分別實現,他最後看那個程式演算法算得快,於是這兩個員工就對介面分別做了實現。PM只需要寫一個程式就可以評估他們的演算法。
public int getTime(Interface in){
int a = System.currentTime();
in.run();
return Sustem.currentTime()-a;
}
試想一下,如果沒有介面,這個經理必須分別new這兩個員工的class,然後呼叫可能不同的方法(A:run(), B:go())來執行。

3.(回答你的問題)介面的繼承關注的是功能的擴充套件,而不是程式碼的修改。class的繼承就是功能性程式碼的增加。兩者關注的焦點不同。

本人觀點:
我個人認為,介面一旦設計好了,很少需要修改,除非業務邏輯或需求有較大變動。

多繼承的用途(只是舉個例子):
如,SUN對一項技術寫了一個規範如J2EE的JMS規範,很多vender在自己的應用伺服器(如WebSphere, WebLogic, Jboss等)都要實現這一個規範,故且把這個規範叫做介面,每個vender想要對這個規範新增自己獨特的功能,怎麼辦呢?就是用介面的繼承,然後對繼承了的介面做實現。
舉個例子:
public interface InterfaceA {

public void method1();
}

public interface InterfaceB {

public void method2();
}

public interface InterfaceAB extends InterfaceA, InterfaceB{

public void method3();
}

public class InterfaceAImpl implements InterfaceA {

@Override
public void method1() {
System.out.println("The implemention of InterfaceA.");
}

}

public class InterfaceBImpl implements InterfaceB {

@Override
public void method2() {
System.out.println("The implemention of InterfaceB.");
}

}

public class InterfaceABImpl implements InterfaceAB {

@Override
public void method1() {
System.out.println("The implemention of InterfaceAB(method1).");
}

@Override
public void method2() {
System.out.println("The implemention of InterfaceAB(method2).");
}

@Override
public void method3() {
System.out.println("The implemention of InterfaceAB(method3).");
}

}

public class Main {


public static void main(String[] args) {
InterfaceA a = new InterfaceABImpl();
InterfaceB b = new InterfaceABImpl();
InterfaceAB ab = new InterfaceABImpl();
a.method1();
b.method2();
ab.method3();
}

}

利用多型(向上轉型),我們就可以達到不同vender間介面的統一。

總之,這種情況我很少見,主要用1、2的特性

轉載地址: http://blog.sina.com.cn/s/blog_718335510100ubd3.html

相關文章