之前看的一本書的筆記,上周再看設計模式的時候,想到了這篇之前在看某本書時候的筆記。
面向接口編程很重要的一點就是接口回調,用接口聲明的變量稱作接口變量,屬於引用型變量,可以存放實現該接口的類的實例的引用,對象引用。
接口回調:可以把實現某一接口的類創建的對象的引用賦值給該接口聲明的接口變量,那么該接口變量就可以調用被類實現的接口方法。
Com com; //接口
ImplCom object; //實現接口的對象
com = object; //接口回調,com會根據對象的不同而實現不同的接口方法,回調類重寫的接口方法
接口和abstract類的比較如下:
abstract類和接口都可以有abstract方法。
接口中只可以有常量,不能有變量;而abstract類中既可以有常量也可以有變量。
abstract類中也可以有非abstract方法,接口不可以。
在設計程序時應當根據具體的分析來確定是使用抽象類還是接口。abstract類除了提供重要的需要重寫的abstract方法外,也提供了子類可以繼承的變量和非abstract方法。如果某個重要問題需要使用繼承才能更好地解決,比如,子類需要重寫父類的abstract方法,還需要從父類繼承一些變量或繼承一些重要的非abstract方法,就可以考慮用abstract類。如果某個問題不需要繼承,只是需要若干個類給出某些重要的abstract方法的實現細節,就可以考慮使用接口。
使用接口編程的最重要的核心思想就是使用接口回調,及接口變量存放實現該接口的類的對象的引用,從而接口變量就可以回調類實現的接口方法。
1
2
3
4
|
public
interface
Advertisement {
public
void
showAdvertisement();
public
String getCorpName();
}
|
2、設計AdvertisementBoard類(廣告牌),該類有一個show(Advertisement adver)方法,該方法的參數是接口Advertisement的類型,顯然該參數adver可以存放任何實現Advertisement接口的類的對象的引用,並回調類重寫的接口方法showAdvertisement()來顯示公司的廣告詞,回調類重寫的接口方法getCorpName來獲取公司名稱。
1
2
3
4
5
6
|
public
class
AdvertisementBoard{
public
void
show (Advertisement adver){
System.out.println(adver.getCorpName()+
"廣告詞"
);
adver.showAdvertisement();
//接口回調
}
}
|
實現接口的A公司類:
1
2
3
4
5
6
7
8
|
public
class
Acorp implement Advertisement {
public
void
showAdvertisement(){
System.out.println(
"AAAAAAAAAAAAAAAAA"
);
}
public
String getCorpName(){
return
"A Corp"
;
}
}
|
實現接口的B公司類:
1
2
3
4
5
6
7
8
|
public
class
Bcorp implement Advertisement {
public
void
showAdvertisement(){
System.out.println(
"BBBBBBBBBBBBBBBBB"
);
}
public
String getCorpName(){
return
"B Corp"
;
}
}
|
運行住程序:
1
2
3
4
5
6
7
|
public
class
test (){
public
state
void
main (string args[]){
AdvertisementBoard board =
new
AdvertisementBoard();
board.show(
new
Acorp());
board.show(
new
Bcorp());
}
}
|
最后程序會根據對象的不同調用不同的方法。若想要添加C公司,只要實現接口的方法就可以了。