一.封装

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

访问修饰符:

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();

}

简单计算器的类图

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

  1. java观察者模式类图_设计模式(十八)——观察者模式(JDK Observable源码分析)...

    1 天气预报项目需求,具体要求以下: 1) 气象站能够将天天测量到的温度,湿度,气压等等以公告的形式发布出去(好比发布到本身的网站或第三方).java 2) 须要设计开放型 API,便于其余第三方也能 ...

  2. Java零基础学习(三)封装继承多态

    1.封装:将属性私有化,通过公共方法来访问,确保安全性. this的含义:对象本身,自己. 2.继承:根据现有类派生出新类的机制,新类中具有基类的属性和方法. 通过extends继承: public ...

  3. python 参数类型的多态_【Python】面向对象:类与对象\封装\继承\多态

    六.Python面向对象--类与对象\封装\继承\多态 1.什么是面向对象编程 1.1 程序设计的范式:程序可控,易于理解 1.2 抽象并建立对象模型 1.3 程序是不同对象相互调用的逻辑.每个对象在 ...

  4. Java继承_Hachi君浅聊Java三大特性之 封装 继承 多态

    Hello,大家好~我是你们的Hachi君,一个来自某学院的资深java小白.最近利用暑假的时间,修得满腔java语言学习心得.今天小宇宙终于要爆发了,决定在知乎上来一场根本停不下来的Hachi君个人 ...

  5. 大数据笔记8—java基础篇4(面向对象-封装-继承-多态)

    面向对象 一.面向对象 1.面向过程 1.2.举例 1.3.总结 二.面向对象 1.简述 2.举例 3.思想特点 2.1.类的定义格式 2.1.1.简述 2.2.2.格式 2.3.3.示例 三.类的使 ...

  6. Day55-每日一道Java面试题-Java 面向对象编程三大特性: 封装 继承 多态

    Java 面向对象编程三大特性: 封装 继承 多态 封装 封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法,如果属性不想被外界访问,我们大可不必提供方法给外界访问.但是如果一个类没有 ...

  7. java流类图结构_java I/O 流总结

    一.java 流操作有关的类和接口: 类                                                                          说明 Fil ...

  8. java流类图结构_java学习之IO流(学习之旅,一)

    个人在学习IO流的时候看到如下所示java 流类图结构的时候,我的感想是,这么多··处于蒙的状态. Java流类图结构 这么多,没有分类不好学,那我们就慢慢一口一口的吃,这样每天学习一点就好了,其实很 ...

  9. python--编写程序:实现乐手弹奏乐器,乐手可以弹奏不同的乐器而发出不同的声音------使用类的封装继承多态的问题/使用面向对象的思想,设计自定义类,描述出租车和家用轿车的信息

    编写程序:实现乐手弹奏乐器,乐手可以弹奏不同的乐器而发出不同的声音 ------使用类的封装继承多态的问题 class Instrumnet():#乐器类def make_sound(self):pa ...

最新文章

  1. (转)深入理解SP、LR和PC
  2. 《智慧书》格言241-250
  3. vue避免重新渲染_小白也能懂的VUE的生命周期探寻
  4. C语言之强制类型转换与指针--#define DIR *((volatile unsigned int *) 0x0022)
  5. 在Java8的foreach()中不能break,如果需要continue时,可以使用return
  6. smarty课程---最最最简单的smarty例子
  7. HttpURLConnection根据URL下载图片
  8. COVID-19 肺炎疫情数据实时监控(python 爬虫 + pyecharts 数据可视化 + wordcloud 词云图)
  9. Elasticsearch 监控和优化(持续)
  10. 选课系统类图与数据结构图
  11. RNAcentral:非编码RNA数据库
  12. python怎么算二元一次方程_利用Python求解二元一次方程
  13. 【滤波器】基于matlab时变维纳滤波器设计【含Matlab源码 1870期】
  14. cl.nd77.pw index.php,Loop in template
  15. PWM的基本原理及应用实例
  16. 怎样快速开发属于自己的微信小程序?
  17. 文字转语音软件哪个好,这一款值得推荐
  18. 基于Android开发的环形进度条(动态显示运动步数)
  19. 一个不错的免费打电话的程序
  20. 调用百度API,识别pdf图片

热门文章

  1. IDEA的基本使用:让你的IDEA有飞一般的感觉 | CSDN 博文精选
  2. 云栖大会 | 释放计算弹性,阿里云做了很多
  3. 这个充电宝太黑科技了,又小又不用自己带线,长见识了~
  4. matlab vs2010编译器xml,如何在MATLAB R2010a 中使用Visual C++ 2010编译器
  5. linux系统无法识别固态硬盘_linux查看硬盘是不是ssd
  6. win10 修改软件、应用、游戏安装的默认目录
  7. 自从有了mybatis-plus代码生成器,写代码效率高了一大截
  8. qq互动视频页面加载失败_互动案例技术分析(2)
  9. 更改应用程序图标_苹果更新 TestFlight 应用图标,增加更多拟真细节
  10. h3c交换机划分vlan配置_华为、H3C、锐捷三家交换机配置命令详解