【多态】面向接口的编程思想

原创 2016年08月30日 22:33:41

开发系统时,主体架构使用接口,接口构成系统的骨架 。这样就可以通过更换接口的实现类来更换系统的实现。

实例:学校要安装彩色和黑白两台打印机,分别打印教员和机构的相关信息(用接口实现)

教员和机构的相关信息都需要打印,这种like-a关系,使用接口把二者共有的特性抽象出来,在这里就是把要打印的信息抽象成接口:
detail()方法是一个抽象方法,默认可以不写abstract关键字

interface IInfo{
    String detail();
}

教员类初始化教员信息,再实现IInfo方法

class Teacher implements IInfo{
    private String name;
    private int age;
    public Teacher(String name,int age){
        this.name=name;
        this.age=age;
    }
    //实现接口IInfo的具体方法
    public String detail(){
        return "Hello, I'm "+name+", "+age+" years old.";
    }

}

学校类安装打印机,打印数据,实现IInfo方法

class School implements IInfo{
    private Printer p=null//安装打印机
    //拿父类的引用变量作为参数,好处就是可以接收任何子类的对象
    //越是抽象的事物越稳定
    public void setPrinter(Printer p){
        this.p=p;
    }
    //接口的引用变量可以引用它实现类的对象
    //多态,程序设计的时候主体框架使用接口或抽象类,是程序又很好的扩展性
    public void print(IInfo info){
        p.Print(info.detail());
    }
    //实现接口IInfo的具体方法
    public String detail(){
        return "Welcome to xxx School";
    }
}

各式打印机继承了打印机类,所以打印机类的打印方法由具体的子类实现,这里的Print方法应该是一个抽象方法,打印机类是一个抽象类。

abstract class Printer{
    private String brand;
    public Printer(String brand){
        this.brand=brand;
    }
    public String getBrand(){
        return brand;
    }
    public abstract print(String content);
}

打印机子类实现具体的打印方法:

//彩色打印机
class ColorPrinter extends Printer{
    public ColorPrinter(String brand){
        super(brand);
    }
    public void print(String content){
        System.out.println(getBrand()+"ColorPrinter:"+content)
    }
}

class BlackPrinter extends Printer{
    public BlackPrinter(String brand){
        super(brand);
    }
    public void print(String content){
        System.out.println(getBrand+"BlackPrinter:"+content);
    }
}

主方法new对象:打印机对象,学校对象,教员对象

public class printerDemo{
    public static void main(String []args){
        colorPrinter cp=new colorPrinter("HP");//define printer "HP" is colorPrinter
        BWPrinter bp=new BWPrinter("Sony");//define printer "Sony" is BWPrinter
        School school=new School(); //init a school
        Teacher t=new Teacher("Lily",30);
        //school.setColorPrinter(cp); //The school installs colorPrinter "HP"
        //school.Print("Hello Java"); //The school print content with colorPrinter
        //school.setBWPrinter(bp);//The school installs BWPrinter "Sony"
        //school.Print("Hello Java"); //The school print content with BWPrinter
        school.setPrinter(cp);//set BWPrinter
        school.print(t);//print teacher info
        school.setPrinter(bp);//set colorPrinter
        school.print(school);//print school info
    }
}

输出结果
这里写图片描述

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

1.面向对象编程思想(封装继承多态接口)

封装: 1.定义:隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别。 2.封装的目的是:增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,一...

重温《JAVA编程思想》----2017.1.12 多态与接口(完结版)

多态:     1.private方法被自动认定为是final方法,并且对子类是屏蔽的。     2.编译器强制每个子类(都继承自Object)必须调用构造器的原因:可以确保我们想要使用的成员对象都得...

设计模式——面向接口编程之柔性多态增强代码的可扩展性

多态和封装、继承一起作为面向对象的三大特性,无论是Java还是其他面向对象的语言,灵活使用好多态,对于提高我们的编码质量尤其重要。

Java面向接口编程与多态的示例学习

首先假设一个场景,比如我们是卖手机的,如果顾客来了挑选手机,需要一个个拿不同型号的手机去演示功能 为了简便,我们可以制作一个接口,在接口一端连接手机,另一端控制演示手机的各个功能 手机都有发短信、...

第5章 面向对象编程进阶--类的继承、多态、初始化块、final(类)、抽象(类、方法)、接口(继承)

第5章面向对象编程进阶 面向对象编程的三大特征:封装、继承和多态。 5.1类的继承 继承是面向对象三大特征之一,也是实现软件复用的重要手段。  继承的特点 通过继承,在已有类型基础之上进行扩...

PHP面向对象-接口、多态

  • 2015-02-02 10:57
  • 330KB
  • 下载

java编程思想-继承中的多态及相关思考

多态的基本概念 关于多态的理解,属于面向对象的基本概念,这里简单举个教科书中可能经常采用的经典的例子描述一下: public class Animal { public Animal() {...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)