java 面向接口编程_Java——多态与面向接口编程的关系

1、针对同一种行为,不同的对象会有不同的表现形式;

比如打印机都能打印

8673986299f8

image.png

interface Printer {

public void print();

}

class BlackAndWhitePrinter implements Printer {

@Override

public void print() {

System.out.println("这是黑白打印---");

}

}

class ColorPrinter implements Printer {

@Override

public void print() {

System.out.println("这是彩色打印---");

}

}

public class DuoTai {

public static void main(String[] args) {

Printer printer = new BlackAndWhitePrinter();

printer.print();

printer = new ColorPrinter();

printer.print();

}

}

8673986299f8

image.png

2、面向接口编程;

接口定义了行为规范,多接口的组合封装,可以定义一个程序的骨架

//打印机类接口

interface Printer {

//打印机能在纸上打印

public void print(Paper paper);

//打印机报备纸张信息

public void showPaperIntroduce(String paperDesc);

}

//纸类接口

interface Paper {

//纸张提供自己的类型

public String getType();

//纸张提供自己的规格说明

public String viewIntroduce();

}

将接口中可以公共实现的方法抽离到抽象类

abstract class AbstractPaper implements Paper {

protected String type;

private AbstractPaper() {

}

protected AbstractPaper(String type) {

this.type = type;

}

@Override

public String getType() {

return this.type;

}

}

abstract class AbstractPrinter implements Printer{

@Override

public void showPaperIntroduce(String paperDesc) {

System.out.println("打印机自动报备当前使用纸张:");

System.out.println(paperDesc);

}

}

具体子类实现

class A4 extends AbstractPaper {

public A4(String type) {

super(type);

}

@Override

public String viewIntroduce() {

return this.type + ":210×297";

}

}

class A5 extends AbstractPaper {

public A5(String type) {

super(type);

}

@Override

public String viewIntroduce() {

return this.type + ":148×210";

}

}

class BlackAndWhitePrinter extends AbstractPrinter {

@Override

public void print(Paper paper) {

this.showPaperIntroduce(paper.viewIntroduce());

System.out.println("这是" + paper.getType() + "黑白打印---");

}

}

class ColorPrinter extends AbstractPrinter {

@Override

public void print(Paper paper) {

this.showPaperIntroduce(paper.viewIntroduce());

System.out.println("这是" + paper.getType() + "彩色打印---");

}

}

具体使用程序

public class DuoTai {

public static void main(String[] args) {

Printer printer = new BlackAndWhitePrinter();

printer.print(new A5("硬A5纸"));

printer = new ColorPrinter();

printer.print(new A4("软A4纸"));

}

}

8673986299f8

image.png

也可将接口如下修改,那么就程序骨架来说,又是另外一种规范了,则需要其他的具体实现方式

interface IPrinter {

//装纸

public void initPaper(IPaper paper);

//打印,需要在打印时报备纸张信息,并且说明时什么类型的打印

public void print();

//报备纸张信息

public void showPaperIntroduce();

}

一旦接口定义了程序的功能,那么程序实现,都得按照这个规范来实现,程序设计流程,在接口中方可体现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值