// 定义一个抽象的父类
    abstract class Figure
    {
        //声明抽象方法:
        //父类中的所有家里人可以用的方法必须都应用到子类中
        abstract public object getValue();//或者用virtual但是后面必须声明主体部分{ return null; }
        abstract public Figure Add(Figure f1); //{ return null; }
        abstract public Figure Sub(Figure f1);
        abstract public Figure Mul(Figure f1);
        abstract public Figure Div(Figure f1);
    }
    // 实数子类
    class DoubleFigure : Figure
    {
        //声明一个double型字段来存放数据
        protected double _myDouble;
        //运行的时候调用实现初始化
        public DoubleFigure(double num1)
        {
            this._myDouble = num1;
        }
        // 重写父类中输出结果的方法
        public override object getValue()
        {
            return _myDouble;
        }
        //实数相加
        public override Figure Add(Figure f1)
        {
            double doublenum = (double)this.getValue() + (double)f1.getValue();
            //f1.getValue()实际执行的结果类型不由f1声明时的类型决定,而是由指向堆中的内容决定
            DoubleFigure df = new DoubleFigure(doublenum);
            return df;//这里返回值类型为什么不是Figure也可以
            //在堆中开辟的空间地址传给了父类中的变量------父类的变量指向子类中的实例
            //父类变量能传递给子类中变量是因为实际类型没有改变
        }
        //这里不能用运算符的重载:operator必须和public static一同使用,而override不能与static同用
        //public override Figure operator +(DoubleFigure f1)
        //{
        //    double doubleNum = (double)this.getValue() + (double)f1.getValue();
        //    DoubleFigure df = new DoubleFigure(doubleNum);
        //    return df;      
        //}
        // 实数相减
        public override Figure Sub(Figure f1)
        {
            double doubleNum = (double)this.getValue() - (double)f1.getValue();
            DoubleFigure df = new DoubleFigure(doubleNum);
            return df;
        }
        // 实数相乘
        public override Figure Mul(Figure f1)
        {
            double doubleNum = (double)this.getValue() * (double)f1.getValue();
            DoubleFigure df = new DoubleFigure(doubleNum);
            return df;
        }
        //实数相除
        public override Figure Div(Figure f1)
        {
            if ((double)f1.getValue()!=0)
            {
double doubleNum = (double)this.getValue() / (double)f1.getValue();
                DoubleFigure df = new DoubleFigure(doubleNum);   
                return df;         
            }  
            else
            {
                Console.WriteLine("除数不能为0!");
                return new DoubleFigure(0);
            }
        }
        //隐式转换方法实现DoubleFigure类型的数隐式转换为int型
        public static  implicit operator DoubleFigure(int myInt1)
        {
            return new DoubleFigure(myInt1);
        }
       static void Main(string[] args)
        {
            //父类的变量指向子类的实例
            Figure f1 = new DoubleFigure(6);//整数实例
            Figure f2 = new DoubleFigure(1.2); //实数实例
            DoubleFigure f3 = (DoubleFigure)f1.Div(f2);
            Console.WriteLine(f3.getValue()); 
            Console.ReadKey();
        }

C#:继承多态的方法实现数的简单加减乘除运算的更多相关文章

  1. 继承多态绕点 Java篇

    上一篇把C#语言的继承,多态里的特殊的情况做了一下总结,其实那一部分代码都是从Java翻译过去的,今天来总结一下Java在这种情况下是怎么调用的. 上一篇我们说的是:1.多态,只在多态系里方法调用,很 ...

  2. Java继承多态中的方法访问权限控制

    java中的方法天生具有继承多态特性,这点与C++有很大不同(需要在父类方发上加virtual关键字),但用起来确实方便了许多. 最简单的继承多态 声明一个接口BaseIF,只包含一个方法声明 pub ...

  3. 【Java基础 项目实例--Bank项目5】Account 和 customer 对象等 继承、多态、方法的重写

    延续 Java基础 项目实例--Bank项目4 实验要求 实验题目 5: 在银行项目中创建 Account 的两个子类:SavingAccount 和 CheckingAccount 实验目的: 继承 ...

  4. 四. Java继承和多态3. 继承中的方法的覆盖和重载

    在类继承中,子类可以修改从父类继承来的方法,也就是说子类能创建一个与父类方法有不同功能的方法,但具有相同的名称.返回值类型.参数列表. 如果在新类中定义一个方法,其名称.返回值类型和参数列表正好与父类 ...

  5. 浅谈学习C++时用到的【封装继承多态】三个概念

    封装继承多态这三个概念不是C++特有的,而是所有OOP具有的特性. 由于C++语言支持这三个特性,所以学习C++时不可避免的要理解这些概念. 而在大部分C++教材中这些概念是作为铺垫,接下来就花大部分 ...

  6. 深入理解Java面向对象三大特性 封装 继承 多态

    1.封装 封装的定义: 首先是抽象,把事物抽象成一个类,其次才是封装,将事物拥有的属性和动作隐藏起来,只保留特定的方法与外界联系 为什么需要封装: 封装符合面向对象设计原则的第一条:单一性原则,一个类 ...

  7. C#属性-索引器-里氏替换-多态-虚方法-抽象-接口-泛型-

    1.属性 //属性的2种写法 public class person { private string _name; public string Name { get { return _name; ...

  8. Winform打砖块游戏制作step by step第5节---重构代码,利用继承多态

    一 引子 为了让更多的编程初学者,轻松愉快地掌握面向对象的思考方法,对象继承和多态的妙用,故推出此系列随笔,还望大家多多支持. 二 本节内容---重构代码,利用继承多态 1. 主界面截图如下: 2.  ...

  9. java面向对象(封装-继承-多态)

    框架图 理解面向对象 面向对象是相对面向过程而言 面向对象和面向过程都是一种思想 面向过程强调的是功能行为 面向对象将功能封装进对象,强调具备了功能的对象. 面向对象是基于面向过程的. 面向对象的特点 ...

随机推荐

  1. 有关Android存储的相关概念辨析

    我想念许多Android开发人员在碰到有关存储的相关问题时,肯定遇到过“内部存储/内存”.“外部存储/外存”等类似的概念,尤其是将相关概念跟非开发人员解释时,那真是“秀才遇到兵,有理说不清哪”.包括我 ...

  2. NUint使用详解及Visual Studio配置

    NUint使用详解及Visual Studio配置 阅读目录 什么是单元测试? 为什么使用单元测试? NUint使用详解: 示例 属性 断言 简单测试 VS配置: External Tools Vis ...

  3. linux创建进程和等待进程退出

    在WIN32下,在一个进程里我们可以使用CreateProcess()创建一个进程,然后通过调用WaitForSingleObect(), WaitForMultipleObject()等待进程退出. ...

  4. 关于pydev的语法的错误提示

    第三方包引入时,eclipse默认会把一些包定为错误的,错误是:“undefined variable from import...” 其实是对的,可是报错,很烦人 解决方法:window -- pr ...

  5. 马赛克算法及iOS代码实现

    之前做了一下相关涂鸦的东西,发现图片处理挺好玩的,就先讲讲马赛克的实现吧. 放大马赛克图片可以看到,可以看到一个个单色的小正方形.所以马赛克其实也就是把某一点的色值填充了它一定范围内的一个正方形,这样 ...

  6. SPI and API

    目录 背景从面向接口编程说起“接口”位于“调用方”所在的“包”中“接口”位于“实现方”所在的“包”中“接口”位于独立的“包”中需要注意的事项另外一张图备注 背景返回目录 第一次听说 SPI 是阅读&l ...

  7. WordPress 4.3 Beta 1 全新发布,改进了后台功能和用户体验

    WordPress 4.3 Beta 1 发布,此版本是开发版本,不建议在生产环境使用.如果要测试 WordPress 4.3 Beta 版本,可以使用 WordPress Beta Tester 插 ...

  8. Python学习之---冒泡,选择,插入排序

    Python学习之---冒泡,选择,插入排序 最近学习了python基础,写一下3大排序练练手: 1 ''' 2 Created on 2013-8-23 3 4 @author: codegeek ...

  9. JavaScript判断对象的类型

    JavaScript判断对象的类型 最近阅读了一些关于JavaScript判断对象类型的文章.总结下来,主要有constructor属性.typeof操作符.instanceof操作符和Object. ...

  10. 7z文件格式及其源码的分析

    7z文件格式及其源码的分析 本文是一个系列. 主要是分享我最近一年做7z文件开发的经验. 主要包括7z官方源码的结构分析, 以及7z文件格式的分析. 其中涉及到7z源码结构的各个细节, 以及7z文件格 ...