java 计算器类图_多态计算器(封装、继承、多态、简单工厂)

一.封装

向对象程序设计中,一个非常重要的技术便是封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。这样做的好处在于可以使类内部的具体实现透明化,只要其他代码不依赖类内部的私房数据,你便可以安心修改这些代码。此外,这样做也是出于安全方面的考虑,如果代表网上支付卡密码的变量随便就可以被访问到,这样的系统谁还敢用呢?

访问修饰符:

Private:只有类本身能存取.

Protected:类和派生类可以存取.

Internal:只有同一个项目中的类可以存取.

Protected Internal:是Protected和Internal的结合.

Public:完全存取.

实例代码

class Operation //运算基类

{private double _numberA = 0;private double _numberB = 0;public doubleNumberA

{get { return_numberA; }set { _numberA =value; }

}public doubleNumberB

{get { return_numberB; }set { _numberB =value; }

}public virtual double GetResult() //定义虚方法

{double result = 0;returnresult;

}

}

上面 Operation类中字断与方法 就实现了一个封装。

二.多态

1、多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。

编译时的多态性:

编译时的多态性是通过重载来实现的。对于非虚的成员来说,系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操作。

运行时的多态性:

运行时的多态性就是指直到系统运行时,才根据实际情况决定实现何种操作。C#中,运行时的多态性通过虚成员实现。

编译时的多态性为我们提供了运行速度快的特点,而运行时的多态性则带来了高度灵活和抽象的特点。

2、实现多态:

接口多态性。

继承多态性。

通过抽象类实现的多态性。

3、override关键字:

重写父类中的virtual修饰的方法,实现多态。

三.继承

继承主要实现重用代码,节省开发时间。

1、C#中的继承符合下列规则:

继承是可传递的。如果C从B中派生,B又从A中派生,那么C不仅继承了B中声明的成员,同样也继承了A中的成员。Object类作为所有类的基类。

派生类应当是对基类的扩展。派生类可以添加新的成员,但不能除去已经继承的成员的定义。

构造函数和析构函数不能被继承。除此之外的其它成员,不论对它们定义了怎样的访问方式,都能被继承。基类中成员的访问方式只能决定派生类能否访问它们。

派生类如果定义了与继承而来的成员同名的新成员,就可以覆盖已继承的成员。但这并不因为这派生类删除了这些成员,只是不能再访问这些成员。

类可以定义虚文法、虚属性以及虚索引指示器,它的派生类能够重载这些成员,从而实现类可以展示出多态性。

2、new关键字

如果父类中声明了一个没有friend修饰的protected或public方法,子类中也声明了同名的方法。则用new可以隐藏父类中的方法。(不建议使用)

3、base关键字

base 关键字用于从派生类中访问基类的成员:

调用基类上已被其他方法重写的方法。

指定创建派生类实例时应调用的基类构造函数

子类继承基类,并重写父类计算虚方法

classOperationAdd : Operation

{public override doubleGetResult()

{double result = 0;

result= NumberA +NumberB;returnresult;

}

}classOperationSub : Operation

{public override doubleGetResult()

{double result = 0;

result= NumberA -NumberB;returnresult;

}

}classOperationMul : Operation

{public override doubleGetResult()

{double result = 0;

result= NumberA *NumberB;returnresult;

}

}classOperationDiv : Operation

{public override doubleGetResult()

{double result = 0;if (NumberB != 0)

result= NumberA /NumberB;elseConsole.WriteLine("除数不能为零!\n");returnresult;

}

}

运算对象生产工厂

class OperationFactory //运算对象生产工厂

{public static Operation createOperation(stringoperation)

{

Operation oper= null;switch(operation)

{case "+":

{

oper= newOperationAdd();break;

}case "-":

{

oper= newOperationSub();break;

}case "*":

{

oper= newOperationMul();break;

}case "/":

{

oper= newOperationDiv();break;

}

}returnoper;

}

}

Main方法

classProgram

{static void Main(string[] args)

{

Operation oper;

Console.WriteLine("请输入运算符:\r\n");

oper=OperationFactory.createOperation(Console.ReadLine());//调用简单工厂类

Console.WriteLine("请输入第一个数:\r\n");

oper.NumberA= int.Parse(Console.ReadLine());

Console.WriteLine("请输入第二个数:\r\n");

oper.NumberB= int.Parse(Console.ReadLine());double result =oper.GetResult();

Console.WriteLine("运算结果:\r\n");

Console.WriteLine(oper.NumberA.ToString()+"+"+ oper.NumberB.ToString() + "=" +result.ToString());

Console.ReadLine();

}

简单计算器的类图

60116d9b77def40d18ff36a3ca497a72.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/528957.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图书管理系统 java 源码_[源码和文档分享]基于C语言和SQL SERVER数据库实现的图书管理系统...

摘 要本文根据《数据库应用系统设计》课程要求而做。选择图书馆管理系统设计与开发是因为觉得图书馆管理系统对我们的帮助很大,并且经常去图书馆,对图书馆的大部分功能及流程还是比较了解,而且现在有些地方可能还不够完善。这次课程设计目标是…

java useragent 360 遨游 火狐_各种浏览器UserAgent一览表(桌面+移动)

桌面IE而IE各个版本典型的userAgent如下:Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2)Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)Mozilla/4.0 (compatible; MSIE 5.0; Windows NT)其中&#x…

sql server 修改字段不能为空_SQL-SQL介绍

一SQL 介绍SQL(Structured Query Language),语义是结构化语言, 是一门 ANSI 的标准计算机语言,用来访问和操作数据库系统;二 数据库介绍2.1 数据库我们已经知道了SQL是操作数据库的语言,那么数据库是什么&a…

python 数组转音频_Python3+将2声道音频,分拆成1声道

现在是将双声道的音频分拆成单声道的。同理可以将多声道的音频文件,转为1声道的音频文件。注意新形成的音频文件的rate,需要与原音频的相同。import osimport waveimport numpy as npimport pyaudiofile1 os.path.join(os.path.abspath(os.path.dirname…

java定义一个矩阵的类_java写入一个矩阵,如何编程求该矩阵的秩

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼Fraction.java如下:(这个是网上找来的,处理分数的类)// 支持查找功能的分数类class Fraction implements Comparable {// 分子private int numerator;// 分母private int denominator;// 默认构造函数public Fraction()…

python动态映射_Python Django框架url反向解析实现动态生成对应的url链接示例

本文实例讲述了Python Django框架url反向解析实现动态生成对应的url链接。分享给大家供大家参考,具体如下:url反向解析:根据url路由规则,动态生成对应的url链接 (防止硬编码)。url反向解析应用在两个地方:模板中的超链接&#xff…

java标量替换_JAVA逃逸分析、栈上分配、标量替换、同步消除

一、逃逸分析逃逸分析是编译语言中的一种优化分析,而不是一种优化的手段。通过对象的作用范围的分析,为其他优化手段提供分析数据从而进行优化。逃逸分析包括:全局变量赋值逃逸方法返回值逃逸实例引用发生逃逸线程逃逸:赋值给类变量或可以在其…

python图像人类检测_OpenCV人类行为识别(3D卷积神经网络)

1. 3D卷积神经网络相比于2D 卷积神经网络,3D卷积神经网络更能很好的利用视频中的时序信息。因此,其主要应用视频、行为识别等领域居多。3D卷积神经网络是将时间维度看成了第三维。人类行为识别的实际应用:安防监控。(检测识别异常行为&#x…

Spring Cloud Feign作为HTTP客户端调用远程HTTP服务

如果你的项目使用了SpringCloud微服务技术,那么你就可以使用Feign来作为http客户端来调用远程的http服务。当然,如果你不想使用Feign作为http客户端,也可以使用比如JDK原生的URLConnection、Apache的Http Client、Netty的异步HTTP Client或者Spring的RestTemplate。 那么,为…

java查看weblogic服务器_java判断服务器是那种,例如区分tomcat和weblogic | 学步园

package com.geostar.query.util;import org.apache.log4j.Logger;/*** author likehua* 服务器类型探测* Date 2011/04/13* **/public class ServerUtil {public static final String GERONIMO_CLASS "/org/apache/geronimo/system/main/Daemon.class";public s…

拼接的option会多出空行_Word空格,空行,页眉横线等问题,我只花一分钟就全解决了...

从网上复制下来的资料粘贴到Word文档上,出现了许多空格、空行、页眉横线等问题,这时候我们该如何快速地解决这些问题,看看下面的操作你就知道了。一、删除空格1、空格案例从网上复制下来的文字到Word文档中,出现字与字之间有好多空…

基于java高校教师管理系统_基于SSM框架下的JAVA高校教师业务水平综合管理系统...

每天记录学习,每天会有好心情。*^_^*今天和一个朋友共同完成了一个高校教师业务水平综合管理系统项目,我们在开发时选用的框架是SSM(MYECLIPSE)框架。我这个朋友知识有限,只会这个框架,哈哈,都是为了方便他。和往常一样…

oracle连接工具_扯一扯Tableau软件配置数据源系列之Oracle

作者:扯蛋君编辑:齐天大圣声明:本文章仅用于Taleau软件的应用、学习沟通,不代表Taleau公司;文中所示截图来源Taleau官方及软件公开内容,相应著作权归Tableau所有。 今天给大家介绍Tableau工具如何连接数据库…

在java中原始时间_Java 日期时间

Java 日期时间java.util包提供了Date类来封装当前的日期和时间。 Date类提供两个构造函数来实例化Date对象。第一个构造函数使用当前日期和时间来初始化对象。Date( )第二个构造函数接收一个参数,该参数是从1970年1月1日起的微秒数。Date(long millisec)Date对象创建…

如何和后台接触的_后台产品,不只是做支持

最近在招聘后台产品经理,面试过程中提到一个问题,这个问题之前也困扰了我很久:你做的后台产品,价值体现在哪里?只是做业务支持么?今天就来聊聊这个话题。我是做后台产品出身,最开始入行做的是云…

java手写的html转图片格式_(Java实现)HTML转JPG,TIFF等图片格式和TIFF图片合并功能解决方案。...

上一篇文章说到了HTML转PDF的实现方式,而就在那个需求的另外一个方面,项目要求要实现页面转图片的需求,主要是JPG,TIFF,PNG等格式。弄得我有点囧,上次一直没搞定。也没找到合适的工具进行转换。前一小段时间…

云计算呼叫中心_干货|云呼叫中心系统和传统呼叫中心系统的区别在哪?

随着社会的发展,呼叫中心由传统的呼叫中心逐渐发展为云呼叫中心。然而关于这两者的区别,您知道吗?跟随畅远技术一同来了解一下吧......一、购买、安装不同传统呼叫中心软件在配置方面有几个特点:一次购买终身使用;安装…

java从键盘为数组赋值,java给数组赋值

java 动态数组赋值,java对象数组详解,java二维数组赋值,java给数组赋值java数组动态赋值,从零学java笔录-第24篇 图解一维数组在内存中,java二维数组赋值,java给数组赋值java 数组动态赋值,从零学java笔录-第24篇 图解一维数组在内存中,java二维数组赋值,java给数组赋值数组的基…

隔一段时间查找一次 golang_剑指 offer-04 二维数组中的查找

算法名称:二维数组中的查找题目内容:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该…

decorator php,php设计模式 Decorator(装饰模式)

/*** 装饰模式** 动态的给一个对象添加一些额外的职责,就扩展功能而言比生成子类方式更为灵活*/header("Content-type:text/html;charsetutf-8");abstract class MessageBoardHandler{public function __construct(){}abstract public function filter($msg);}class …