》什么是接口
在生活中,接口是一套规范,只要满足这个规范的设备,就可以将它们组装到一起,从而实现该设备的功能。现在以USB接口为例,来学习接口的含义。USB接口实际上是某些企业和组织等制定的一种约定或标准,规定了接口的大小、形状、各引脚信号的范围和含义、通信流程等,并按照约定或标准来设计各种设备,如 U盘、USB 风扇、USB 鼠标都以插到 USB 接口上正常工作。
而在软件中,接口同样是一种规范和标准,它们可以约束类的行为,是一种方法特征的集合,但是没有方法的体现。从这个角度来讲,接口可以看作一种特殊的 “抽象类”,但是采用与抽象类玩全不同的语法来表示,两者的设计理念也不同的,抽象类利于代码复用,接口利于代码的扩展和维护。
接口的定义和类不同,它不在使用class关键字,而是使用 interface 关键字
public interface Student { String Address="宿舍"; //地址 void print(); //学生自白 }
》接口的修饰符可以是 public 或省略了 public 访问控制符,则默认采用包权限访问控制符,即只有在相同包结构下才可以访问该接口。
》接口名应与类名采用相同的命名规则,即如果仅从语法角度看,接口名只要是合法的标识符即可;如果要遵守 Java 可读性规范,则接口名应由多个有意义的单词连缀而成,每个单词首字母大写,单词与单词之间无须任何分隔符,接口名应通常能够使用容辞。
》一个借口可以有多个直接父接口,单接口只能继承接口,不能继承类。
通过反编译工具查看Student .class 文件
通过上面的图我们可以看出在Java 当中会自动为接口的成员变量增加 public static final 修饰符,给方方自动增加 public abstract 修饰符。那么在接口当中存在的属性只能是静态常量属性,方法只能是抽象方法。
那么接下来就使用接口实现打印机功能
》墨盒接口
public interface InkBox { /** * 得到墨盒颜色 */ public String getColor(); }
》纸张接口
public interface Paper { /** * 得到纸张大小 */ public String getSize(); }
》打印机类
public class Printer { InkBox inkBox; Paper paper; public void setInkBox(InkBox inkBox) { this.inkBox = inkBox; } public void setPaper(Paper paper) { this.paper = paper; } public void print(){ System.out.println("使用"+inkBox.getColor()+"墨盒在"+paper.getSize()+"纸张上打印。"); } }
》墨盒实现类
public class ColorInkBox implements InkBox { @Override public String getColor() { return "彩色"; } }
public class GrayInkBox implements InkBox { @Override public String getColor() { return "黑白"; } }
》纸张实现类
public class A4Pager implements Paper { @Override public String getSize() { return "A4"; } }
public class B5Paper implements Paper { @Override public String getSize() { return "B5"; } }
》调用方法
public static void main(String[] args) { //使用彩色墨盒在A4纸上打印 InkBox inkBox=new ColorInkBox(); Paper paper =new A4Paper(); Printer p=new Printer(); p.setInkBox(inkBox); p.setPaper(paper); p.print(); }