面向控制台的计算器一

package com.test.java.features1;import java.util.Scanner;/*** 计算器类*/
public class ComputingCounter {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("输入 stop 关闭计算器");while (true) {System.out.println("请输入一个数");String number = scanner.nextLine();if (number.equals("stop")) { break;}System.out.println("请输入一个运算符号");String symbol = scanner.nextLine();if (number.equals("stop")) { break;}System.out.println("请输入一个数");String number2 = scanner.nextLine();if (number.equals("stop")) { break;}compute(Double.parseDouble(number), Double.parseDouble(number2), symbol);}scanner.close();}private static void compute(double number, double number2, String symbol) {switch (symbol) {case "+":System.out.println((number + number2));break;case "-":System.out.println((number - number2));break;case "*":System.out.println((number * number2));break;case "/":System.out.println((number / number2));break;}}
}

View Code

代码都写在了一个main方法里,这是面向过程编程。


面向控制台的计算器二

假如以后需求发生变化,需要写一个面向windows的计算器,计算器一的代码复用性不高;
所以,我们把计算器一的代码封装为两部分——Client和Opration;Client只负责输入输出,Opration负责后台计算。
这样,如果真的需求变化,要求写一个面向windows的计算器,Opration部分的代码完全是可以被复用的。

package com.test.java.features2;import com.test.java.features2.Opration;import java.util.Scanner;public class Client {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("输入 stop 关闭计算器");while (true) {System.out.println("请输入一个数");String number = scanner.nextLine();if (number.equals("stop")) { break;}System.out.println("请输入一个运算符号");String symbol = scanner.nextLine();if (number.equals("stop")) { break;}System.out.println("请输入一个数");String number2 = scanner.nextLine();if (number.equals("stop")) { break;}Opration.compute(Double.parseDouble(number), Double.parseDouble(number2), symbol);}scanner.close();}
}

Client.java

package com.test.java.features2;public class Opration {public static void compute(double number, double number2, String symbol) {switch (symbol) {case "+":System.out.println((number + number2));break;case "-":System.out.println((number - number2));break;case "*":System.out.println((number * number2));break;case "/":System.out.println((number / number2));}}
}

Opration.java


面向控制台的计算器三

现在我们只支持加、减、乘、除,但是以后可能需要扩展其它的运算,比如x的y次方。
所以把可能发生变化的部分再次封装,分别封装为加法类、减法类、乘法类、除法类,并让它们共同继承Opration类,也就是定义了一个算法族;并使用简单工厂模式创建具体的类而返回抽象类型(多态)

package com.test.java.features3;import java.util.Scanner;public class Client {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("输入 stop 关闭计算器");while (true) {System.out.println("请输入一个数");String number = scanner.nextLine();if (number.equals("stop")) { break;}System.out.println("请输入一个运算符号");String symbol = scanner.nextLine();if (number.equals("stop")) { break;}System.out.println("请输入一个数");String number2 = scanner.nextLine();if (number.equals("stop")) { break;}Opration.passOn(Double.parseDouble(number), Double.parseDouble(number2), symbol);}scanner.close();}
}

Client.java

package com.test.java.features3;public abstract class Opration {public static void passOn(double number, double number2, String symbol) {Opration opratoin = OprationFactory.getOpratoin(symbol);opratoin.compute(number, number2);}public abstract void compute(double number, double number2);
}

Opration.java

package com.test.java.features3;public class Add extends Opration {@Overridepublic void compute(double number, double number2) {System.out.println((number + number2));}
}

Add.java

package com.test.java.features3;public class Sub extends Opration{@Overridepublic void compute(double number, double number2) {System.out.println((number - number2));}
}

Sub.java

package com.test.java.features3;public class Multiply extends Opration {@Overridepublic void compute(double number, double number2) {System.out.println((number * number2));}
}

Multiply.java

package com.test.java.features3;public class Divide extends Opration {@Overridepublic void compute(double number, double number2) {System.out.println((number / number2));}
}

Divide.java

package com.test.java.features3;public class OprationFactory {public static Opration getOpratoin(String symbol) {switch (symbol) {case "+":return new Add();case "-":return new Sub();case "*":return new Multiply();case "/":return new Divide();}return null;}
}

OprationFactory.java

总结:面向对象三大特征,封装性、继承性、多态性。有利于程序的复用性、可扩展性、维护性。

转载于:https://www.cnblogs.com/Mike_Chang/p/10137860.html

面向对象程序设计之封装性、继承性、多态性相关推荐

  1. 面向对象:封装性,继承性,多态性

    面向对象是一种符合人类思维习惯的编程思想.现实生活中存在各种形态的事物,这些事物之间存在各种各样的联系.在程序中使用对象映射现实中的事物,使用对象的关系描述事物之间的联系,这种思想就是面向对象. 文章 ...

  2. java子类创建过程_JAVA入门小小白学习中ing(匿名对象、封装性、继承性、子类对象的创建过程、spuer关键字(用法一))...

    小小白慢慢学习中ing 第十二天 努力努力 本日内容(匿名对象.封装性.继承性.子类对象的创建过程.spuer关键字) 1.匿名对象 创建对象的语法:Person p1 = new Person(); ...

  3. C 语言的标准输入对象是,《面向对象程序设计C+》期末试卷及标准答案

    <面向对象程序设计C++>期末考试试卷(A)班级:姓名:学号:分数: 试卷说明:本套试题共四个大题,全部题目都答在答题纸上,写在 其他地方均无效. (答题纸在本套试卷的第10页上) 一.选 ...

  4. 201871010123-吴丽丽《面向对象程序设计(Java)》第一周学习总结

                                                                            201871010123-吴丽丽<面向对象程序设计 ...

  5. java面对对象教学_Java面向对象程序设计教与学

    原标题:Java面向对象程序设计教与学 面向对象程序设计(Object Oriented Programming,OOP)主要研究如何从对象的角度出发构建程序单元以及程序开发机制,主要内容包括抽象的技 ...

  6. 面向对象程序设计的特点

    1.什么是面向对象编程 面向对象程序设计OOP是一种计算机编程架构.OOP的一条基本原理是计算机程序由单个能够起到子程序作用的单元或者对象组合而成. 面向对象程序设计方法是尽可能模拟人类的思维方式,使 ...

  7. 面向对象程序设计的基本概念

    1.基本术语 (1) 对象和对象类 对象是代码和数据的组合,可以作为一个单位来处理.对象可以是应用程序的一部分,比如可以是控件或窗体.整个应用程序也是一个对象. VB中的每个对象都是用类定义的.用饼干 ...

  8. C++面向对象程序设计教程

    前言 全篇使用标题+代码的形式,知识点的介绍写在代码部分的注释里.书籍为<C++面向对象程序设计教程(第四版)>(陈维兴 林小茶 编著). 第一章为基础概念,过于简单:第七章为输入输出流, ...

  9. java的封装性_Java10-java语法基础(九)——java的封装性

    Java10-java语法基础(九)--java的封装性 一.Java的三大特性:封装.多态.继承 封装:通过类封装对象的数据成员和成员方法,保证只有可信的类或者对象能够访问这些方法和数据成员,对不可 ...

  10. 局部变量和成员变量;Java的封装性;private关键字和this关键字

    局部变量和成员变量的区别: 定义的位置不一样[重点] 局部变量在方法内: 成员变量在方法外,类以内: 作用范围不一样[重点] 成员变量在整个类都可以用 默认值不一样[重点] 成员变量在没有赋值的情况下 ...

最新文章

  1. PHP 字符处理 加密解密 函数收集
  2. 【Linux】一步一步学Linux——sudo配置文件详解(106)
  3. Xcode 9 新建的工程如何支持 iOS 8
  4. c++11 继承构造
  5. 基于 .Net Core 的组件 Nuget 包制作 amp; 发布
  6. LoadRunner函数
  7. 学数学,读原著,勤思考,效果好
  8. Android 宏病毒,xls宏病毒,程序不落地创建傀儡进程实现远控
  9. 计算机色彩知识调研(二):位深、Gamma值、标准色温和Display P3
  10. idea怎么光标多选
  11. 【浪漫程序员系列】情人节给女友写代码表达爱意,让她感动到哭
  12. 没错,这就是九大爷平台1225车品狂欢节预告!
  13. 搭建一个多对多的音视频通信服务
  14. 黑苹果win10双系统下文件名变灰色解决办法
  15. win10电脑禁用开机自启动软件
  16. USB 发展 缺陷 与 未来
  17. 【Django入门】——模型管理器对象、模型管理器类和模型类
  18. python入门三剑客怎么样_python三剑客
  19. Kotlin contract 用法及原理
  20. 母牛python_使用Python解决母牛问题

热门文章

  1. python gui界面设置数据储存在哪里_Python写GUI
  2. MySQL 非空约束(NOT NULL)入门
  3. Codeforces Round #564 (Div. 2) A. Nauuo and Votes
  4. 企业数字化转型必备利器之微服务扩展
  5. AtCoder Grand Contest 025 B - RGB Coloring
  6. 《中国人工智能学会通讯》——1.13 总结与展望
  7. CCNA学习笔记12-NAT
  8. java8: hashmap性能提升
  9. eclipse插件:OpenExplorer快速打开文件目录
  10. C3P0的几种使用方法(非JNDI)