一、接口
1.什么是接口
接口是比抽象類更抽象的定義,接口不可以被實例化 實現類必須實現接口的所有方法 實現類可以實現多個接口 、多個接口使用逗號隔開 接口中的變量都是靜態常量(public static final)?程序設計時面向接口的約定而不考慮具體實現 。
2.為什么使用接口
有些事物具有相同的功能,多個類可以做相同的功能,程序設計中,要做到將功能模塊化,細分化,這樣有利于代碼的改寫,減少代碼冗余度,接口和繼承類似,但是繼承具有單根性,所以有了接口這個定義。
3.怎么使用接口
接口中的成員變量 默認都是public static final的,必須顯式初始化 接口中的方法 默認都是public abstract的 ,接口沒有構造方法,不能被實例化 一個接口不能實現另一個接口,但可以繼承多個其他接口 一個類必須實現接口抽象方法,除非這個類也是抽象類
4.接口與抽象類的區別
相同點 代表系統的抽象層 都不能被實例化 都能包含抽象方法 用于描述系統提供的服務,不必提供具體實現
不同點 在抽象類中可以為部分方法提供默認實現,而接口中只能包含抽象方法 抽象類便于復用,接口便于代碼維護 一個類只能繼承一個直接的父類,但可以實現多個接口
二、利用接口完成問題
問題:墨盒和紙張的規格是一種約定 打印機需要遵守這些約定 用面向接口編程的方式開發 制定墨盒、紙張的約定或標準 其他廠商按照墨盒、紙張的標準生產墨盒、紙張 打印機廠商使用墨盒、紙張的標準開發打印機
分析:墨盒和紙張規格是個接口,需要創建類去分別實現紙張和墨盒的接口,創建打印機類去組裝墨盒和紙張打印,最后創建測試類
1.創建紙張接口
//紙張的接口
public interfacePaper {
String newline="\n";//紙張都會有換行符所以定義在接口里//寫入字符的功能
void putChar(charword);//讀取紙張上內容的功能
String getContent();
}
2.創建墨盒的接口
//創建墨盒接口
public interfaceInk {//返回指定顏色
String getColor(int r,int g,intb);
}
3.實現墨盒接口
public class ColorInk implementsInk{
@Overridepublic String getColor(int r, int g, intb) {
Color color=new Color(r,g,b);//創建color對象
return "#"+Integer.toHexString(color.getRGB()).substring(2);
}
}
4.實現紙張接口
//紙張實現類
public class TextPaper implementsPaper{int linewords=16;//定義一行有16個字符
int rows=5;//一樣有五行
int x=0;int y=0;int paper=1;
String content="";
@Overridepublic void putChar(charword) {
content+=word;
x++;//移動字符的位置
if(x==linewords){
content+=newline;
x=0;
y++;
}if(y==rows){
content+="=======第"+paper+"頁=======";
paper++;
y=0;
content+=newline+newline;
}
}
@OverridepublicString getContent() {//獲取內容的階段
if(!(x==0&&y==0)){//頁中是否存在空行 lines-y=空行 \n
int count=rows-y;for(int i=0;i
content+=newline;
}
content+="=======第"+paper+"頁=======";
}returncontent;
}
}
5.組裝墨盒
//打印機類組裝墨盒和紙張
public classPrinter {private Ink ink; //墨盒
private Paper paper; //紙張
public voidprint(String content){
System.out.println("該打印機使用的顏色是:"+ink.getColor(50, 50, 50));for (int i = 0; i < content.length(); i++) {char c=content.charAt(i);
paper.putChar(c);
}
System.out.println(paper.getContent());
}publicInk getInk() {returnink;
}public voidsetInk(Ink ink) {this.ink =ink;
}publicPaper getPaper() {returnpaper;
}public voidsetPaper(Paper paper) {this.paper =paper;
}
}
6.創建測試類
public classTest {public static voidmain(String[] args) {//準備墨盒和紙張
Ink ink=newBlackInk();
Paper paper=newTextPaper();
Printer printer=newPrinter();
printer.setInk(ink);
printer.setPaper(paper);
printer.print("2222222222222222222222222222222222222222222222222222222");//輸入的文本
}
}