接口
接口特性
接口不可以被实例化
实现类必须实现接口的所有方法,否则实现类必须是抽象类
实现类可以实现多个接口,来弥补Java不能多继承
接口中的变量都是静态常量
public interface DemoInterface {
public void demo();
//其他方法
//所有方法都是抽象的
小结:接口的优点
可以被多继承
设计和实现完全分离
更自然的使用多态
更容易搭建程序框架
更容易更换实现
接口特性
接口不可以被实例化
实现类必须实现接口的所有方法,否则实现类必须是抽象类
实现类可以实现多个接口,来弥补Java不能多继承
接口中的变量都是静态常量
public interface DemoInterface {
public void demo();
//其他方法
//所有方法都是抽象的
}
如何使用接口
小结:接口的优点
可以被多继承
设计和实现完全分离
更自然的使用多态
更容易搭建程序框架
更容易更换实现
补充:常量
接口实例
业务员懂业务 程序员懂程序 工程师懂业务工程师懂程序
简单 继承+接口
模拟打印机案例
墨盒:彩色、黑白
纸张类型:A4、B5
墨盒和纸张都不是打印机厂商提供的
打印机的打印功能需要使用兼容市场上的墨盒、纸张
package com.jerehedu.print;
public interface InkBox {
void ink();
}
package com.jerehedu.print;
public interface PaperBox {
void paper();
}
package com.jerehedu.print;
public interface PrintBox {
void print(InkBox ink,PaperBox paper);
}
package com.jerehedu.print;
public class ColorInkBox implements InkBox {
@Override
public void ink() {
// TODO Auto-generated method stub
System.out.println("组装彩色墨盒");
}
}
package com.jerehedu.print;
public class BlackInkBox implements InkBox {
@Override
public void ink() {
// TODO Auto-generated method stub
System.out.println("组装黑白墨盒");
}
}
package com.jerehedu.print;
public class A4PaperBox implements PaperBox {
@Override
public void paper() {
// TODO Auto-generated method stub
System.out.println("放置A4纸");
}
}
package com.jerehedu.print;
public class B5PaperBox implements PaperBox {
@Override
public void paper() {
// TODO Auto-generated method stub
System.out.println("放置B5纸");
}
}
package com.jerehedu.print;
public class HupuPrintBox implements PrintBox {
private InkBox ink;
private PaperBox paper;
public InkBox getInk() {
return ink;
}
public void setInk(InkBox ink) {
this.ink = ink;
}
public PaperBox getPaper() {
return paper;
}
public void setPaper(PaperBox paper) {
this.paper = paper;
}
@Override
public void print(InkBox ink, PaperBox paper) {
// TODO Auto-generated method stub
setInk(ink);
ink.ink();
setPaper(paper);
paper.paper();
System.out.println("惠普打印机开始工作了");
}
}
package com.jerehedu.print;
public class OtherPrintBox implements PrintBox {
private InkBox ink;
private PaperBox paper;
public InkBox getInk() {
return ink;
}
public void setInk(InkBox ink) {
this.ink = ink;
}
public PaperBox getPaper() {
return paper;
}
public void setPaper(PaperBox paper) {
this.paper = paper;
}
@Override
public void print(InkBox ink, PaperBox paper) {
// TODO Auto-generated method stub
setInk(ink);
this.ink.ink();
setPaper(paper);
this.paper.paper();
System.out.println("其他牌子的打印机开始工作了");
}
}
package com.jerehedu.print;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
//组装一个惠普彩色a4打印机
ColorInkBox colorbox=new ColorInkBox();
A4PaperBox a4box=new A4PaperBox();
HupuPrintBox hupu=new HupuPrintBox();
hupu.print(colorbox, a4box);
//组装一个其他牌子的黑白b5打印机
BlackInkBox blackbox=new BlackInkBox();
B5PaperBox b5box=new B5PaperBox();
OtherPrintBox other=new OtherPrintBox();
other.print(blackbox, b5box);
}
}
作者:冲天之峰 20160530