开闭原则:对修改是封闭的,对扩展是开放的,不要违反开闭原则。

可以使用多态解决这个问题。父类的引用变量可以引用子类是对象。

写的越是抽象,越是稳定

public class printerDemo {
public static void main(String[] args) {
/*colorPrinter cp = new colorPrinter("惠普");
blackPrinter bp = new blackPrinter("联想");*/
printer p1 = new colorPrinter("惠普");
printer p2 = new blackPrinter("联想");
printer p3 = new DDDPrinter("索尼");
school sch = new school();
/*sch.setBlackPrinter(bp);
sch.setColorPrinter(cp);*/
sch.setPriner(p1);
sch.setPriner(p2);
/*cp.print("abc");
bp.print("abc");*/
p1.print("hello");
p2.print("hello");
p3.print("hello");
} } class school{
/*private colorPrinter cp = null;
private blackPrinter bp = null;*/
private printer p = null;
/*public void setColorPrinter(colorPrinter cp) {
this.cp = cp;
}
public void setBlackPrinter(blackPrinter bp) {
this.bp = bp;
}*/
public void setPriner(printer p) {
this.p = p;
}
public void print(String content) {
/*cp.print(content);
bp.print(content);*/
p.print(content);
}
} class printer{
private String brand;
public String getBrand() {
return brand;
} public printer(String brand) {
this.brand = brand;
} public void print(String content) {//重写 }
} class colorPrinter extends printer{
public colorPrinter(String brand) {
super(brand);
} public void print(String content) {
System.out.println(getBrand()+"彩色打印:"+content);
}
} class blackPrinter extends printer{
public blackPrinter(String brand) {
super(brand);
} public void print(String content) {
System.out.println(getBrand()+"黑白打印:"+content);
}
} class DDDPrinter extends printer{
public DDDPrinter(String brand) {
super(brand);
} public void print(String content) {
System.out.println(getBrand()+"3D打印:"+content);
}
}

java多态-优化上个实例的更多相关文章

  1. java多态的具体表现实例和理解

    Java的多态性 面向对象编程有三个特征,即封装.继承和多态. 封装隐藏了类的内部实现机制,从而可以在不影响使用者的前提下改变类的内部结构,同时保护了数据. 继承是为了重用父类代码,同时为实现多态性作 ...

  2. JAVA上百实例源码以及开源项目

    简介 笔者当初为了学习JAVA,收集了很多经典源码,源码难易程度分为初级.中级.高级等,详情看源码列表,需要的可以直接下载! 这些源码反映了那时那景笔者对未来的盲目,对代码的热情.执着,对IT的憧憬. ...

  3. JAVA上百实例源码网站

    JAVA源码包1JAVA源码包2JAVA源码包3JAVA源码包4 JAVA开源包1 JAVA开源包2 JAVA开源包3 JAVA开源包4 JAVA开源包5 JAVA开源包6 JAVA开源包7 JAVA ...

  4. 深入理解Java多态机制

    从字节码层面来看,Java中的所有方法调用,最终无外乎转换为如下几条调用指令. invokestatic: 调用静态方法. invokespecial: 调用实例构造器<init>方法,私 ...

  5. Java多态的实现机制是什么,写得非常好!

    作者:crane_practice www.cnblogs.com/crane-practice/p/3671074.html Java多态的实现机制是父类或接口定义的引用变量可以指向子类或实现类的实 ...

  6. Java基础 (上)

    基础概念与常识 Java 语言有哪些特点? 简单易学: 面向对象(封装,继承,多态): 平台无关性( Java 虚拟机实现平台无关性): 支持多线程( C++ 语言没有内置的多线程机制,因此必须调用操 ...

  7. Java 程序优化 (读书笔记)

    --From : JAVA程序性能优化 (葛一鸣,清华大学出版社,2012/10第一版) 1. java性能调优概述 1.1 性能概述 程序性能: 执行速度,内存分配,启动时间, 负载承受能力. 性能 ...

  8. Java 性能优化之 String 篇

    原文:http://www.ibm.com/developerworks/cn/java/j-lo-optmizestring/ Java 性能优化之 String 篇 String 方法用于文本分析 ...

  9. Java 多态——与C++的比较

    学习了Java和C++之后,由于长期不使用C++,而java的基础知识掌握不牢,现在已经搞不清java多态了.现在先来谈谈java多态,稍后有时间再更新C++的多态,并进行比较~ 一. Java的多态 ...

随机推荐

  1. git hub 建立公钥

    1.  执行 $ eval "$(ssh-agent -s)" 2. 增加 ssh $ ssh-add ~/.ssh/id_rsa 3. 复制 生成的key (执行下面命令后就相当 ...

  2. C#通过XML导出Excel

    最近IOS项目中有手机生成Excel,让我想起了之前做C#时做的生成Excel的,之前都放在空间日志中,今天把它弄到博客中分享一下

  3. Vue组件库

    滴滴cube-ui https://didi.github.io/cube-ui/#/zh-CN/docs/quick-start 有赞开源Vant(适合做商城) https://tech.youza ...

  4. AngularJs ng-repeat重复项异常解决方案

    ng-repeat="v in arr track by $index" <!DOCTYPE html> <html lang="en"> ...

  5. ef——存储过程

      数据库中存在存储过程GetCategory: ALTER proc [dbo].[GetCategory] @cid int as begin select * from Categories w ...

  6. Fork开源项目之通讯框架

    项目发布于:https://github.com/HouZhiHouJue/IOCPMSG.看代码前请先看简介.

  7. [PHP] apache在worker模式配置fastcgi使用php-fpm

    1.准备: dpkg -L apache2查看所有安装的apache2的应用 a2query -M查看apache2使用的模式 httpd -l旧版本查看当前apache模式 2.查看apache的进 ...

  8. [linux] C语言Linux系统编程-socket回声客户端

    回声客户端: 1.所谓“回声”,是指客户端向服务器发送一条数据,服务器再将数据原样返回给客户端,就像声音一样,遇到障碍物会被“反弹回来”. 2.客户端也可以使用 write() / send() 函数 ...

  9. js中数组, JSON的与字符串的处理

    1. JSON转字符串 var jsonStr = {"name": "xiaoming", "sex": "男"} J ...

  10. C++ STL:lower_bound与upper_bound实现

    lower_bound lower_bound(begin, end, target)用来查找一个已排序的序列中[begin, end)第一个大于等于target的元素index.数组A如下: val ...