接口是比抽象類更抽象的定義,接口不能夠被實例化 實現類必須實現接口的全部方法 實現類能夠實現多個接口 、多個接口使用逗號隔開 接口中的變量都是靜態常量(public static final) 程序設計時面向接口的約定而不考慮具體實現 。編程
有些事物具備相同的功能,多個類能夠作相同的功能,程序設計中,要作到將功能模塊化,細分化,這樣有利於代碼的改寫,減小代碼冗餘度,接口和繼承相似,可是繼承具備單根性,因此有了接口這個定義。ide
接口中的成員變量 默認都是public static final的,必須顯式初始化 接口中的方法 默認都是public abstract的 ,接口沒有構造方法,不能被實例化 一個接口不能實現另外一個接口,但能夠繼承多個其餘接口 一個類必須實現接口抽象方法,除非這個類也是抽象類模塊化
相同點 表明系統的抽象層 都不能被實例化 都能包含抽象方法 用於描述系統提供的服務,沒必要提供具體實現測試
不一樣點 在抽象類中能夠爲部分方法提供默認實現,而接口中只能包含抽象方法 抽象類便於複用,接口便於代碼維護 一個類只能繼承一個直接的父類,但能夠實現多個接口this
問題:墨盒和紙張的規格是一種約定 打印機須要遵照這些約定 用面向接口編程的方式開發 制定墨盒、紙張的約定或標準 其餘廠商按照墨盒、紙張的標準生產墨盒、紙張 打印機廠商使用墨盒、紙張的標準開發打印機spa
分析:墨盒和紙張規格是個接口,須要建立類去分別實現紙張和墨盒的接口,建立打印機類去組裝墨盒和紙張打印,最後建立測試類設計
1.建立紙張接口code
//紙張的接口 public interface Paper { String newline="\n";//紙張都會有換行符因此定義在接口裏 //寫入字符的功能 void putChar(char word); //讀取紙張上內容的功能 String getContent(); }
2.建立墨盒的接口對象
//建立墨盒接口 public interface Ink { //返回指定顏色 String getColor(int r,int g,int b); }
3.實現墨盒接口blog
public class ColorInk implements Ink{ @Override public String getColor(int r, int g, int b) { Color color=new Color(r,g,b);//建立color對象 return "#"+Integer.toHexString(color.getRGB()).substring(2); } }
4.實現紙張接口
//紙張實現類 public class TextPaper implements Paper{ int linewords=16;//定義一行有16個字符 int rows=5;//同樣有五行 int x=0; int y=0; int paper=1; String content=""; @Override public void putChar(char word) { content+=word; x++;//移動字符的位置 if(x==linewords){ content+=newline; x=0; y++; } if(y==rows){ content+="=======第"+paper+"頁======="; paper++; y=0; content+=newline+newline; } } @Override public String getContent() { //獲取內容的階段 if(!(x==0&&y==0)){ //頁中是否存在空行 lines-y=空行 \n int count=rows-y; for(int i=0;i<count;i++){ content+=newline; } content+="=======第"+paper+"頁======="; } return content; } }
5.組裝墨盒
//打印機類組裝墨盒和紙張 public class Printer { private Ink ink; //墨盒 private Paper paper; //紙張 public void print(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()); } public Ink getInk() { return ink; } public void setInk(Ink ink) { this.ink = ink; } public Paper getPaper() { return paper; } public void setPaper(Paper paper) { this.paper = paper; } }
6.建立測試類
public class Test { public static void main(String[] args) { //準備墨盒和紙張 Ink ink=new BlackInk(); Paper paper=new TextPaper(); Printer printer=new Printer(); printer.setInk(ink); printer.setPaper(paper); printer.print("2222222222222222222222222222222222222222222222222222222");//輸入的文本 } }