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

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

比如打印机都能打印

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();
    }
}
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纸"));
    }
}
image.png

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

interface IPrinter {
    //装纸
    public void initPaper(IPaper paper);
    //打印,需要在打印时报备纸张信息,并且说明时什么类型的打印
    public void print();
    //报备纸张信息
    public void showPaperIntroduce();
}

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

你可能感兴趣的:(Java——多态与面向接口编程的关系)