一、接口
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");//输入的文本
}
}