// 定义一个抽象的父类
    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. JQuery UI Layout Plug-in布局

    端]使用JQuery UI Layout Plug-in布局   引言 使用JQuery UI Layout Plug-in布局框架实现快速布局,用起来还是挺方便的,稍微研究了一下,就能上手,关于该布 ...

  2. IOS UI 第十一篇: UITABLEVIEW

    DIY a tableviewcell :   - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *) ...

  3. KMP算法详解-- 转自Matrix67

       6 7 8 9 --    A = a b a b  6 7  7 8 9 --    A = a b a b a  5 6 7  8 9 --    A = a b a b a b  6 7 ...

  4. memcpy的实现

    memcpy的实现看起来貌似比较简单,但是也是有注意的地方! void *memcpy(void *dst, const void *src, size_t size) { //check argum ...

  5. Day3:T3DP T4堆排序

    QAQ因为T3的题解说的不是很清楚,但是blogs又不能按照自己想要的顺序排+略有一点强迫症 所以先挖个坑放着,过几天再补上

  6. c# UDP/TCP协议简单实现(简单聊天工具)

    长时间没有摸这两个协议,写个代码温习下 下面是界面 [服务器界面] [登陆界面] [好友列表界面(我登陆了2个)] [聊天界面] 下面大致讲解下用到的内容 1.用户登陆于服务器通信用到的tcp协议,服 ...

  7. 安装升级System.Web.Optimization.dll

    今天在使用backload时,VS提示solution所引用的System.Web.Optimization.dll 版本低,编译不过,于是便删掉,从新添加引用,悲剧的是在添加引用窗口中没找到,在Nu ...

  8. Asycn/Await 异步编程初窥(二)

    经过总过4天的学习和实践,做完了 WinForm 下 .Net 4.5 的基本异步应用,实现了一个 Http 协议下载的测试程序,为以后使用 .Net 4.5 积累知识和经验.这个小程序完成这样几个作 ...

  9. C#获取友好时间差

    /// <summary> /// 获取时间差 /// </summary> /// <param name="dtOld">要减的时间< ...

  10. CentOS上搭建java WEB开发环境Tomcat+MySQL+JDK

    对于初学者来说,想在linux系统上搭建一个java web服务器,不知道什么方案可行, 这篇文章主要是告诉这些基础和概念相对薄弱的同学,这样搭建是可行的,大体上没问 题的,出问题也是细节问题.所以此 ...