// 定义一个抽象的父类
    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. jsonp总结

    由于“同源策略”的限制,ajax不能做跨域请求,jsonp是当下解决跨域请求最流行的方案,来个例子(index.html): <!doctype html> <html lang=& ...

  2. 关于ADO.NET参数化查询的提问

    最近我们的正式环境一直在报错一个异常,首先我贴出来异常信息 BLL层 捕获到了请求的url Net.BLL.MobileFun MobileFun.GetBusinessBidPolicy 异常 传入 ...

  3. 打开Openstack dashboard出现Internal Server Error

    最近研究openstack,想把自己遇到的问题记录下来,同时如果有别的朋友也碰到同样问题的时候可以有个参考. 这次的问题是在openstack搭建好之后,dashboard本身是能用的,但是在某一天后 ...

  4. 我看TDD测试驱动开发

    今天在实验室给大家介绍了一下TDD和Docker,大家对TDD都比较感兴趣,包括老板,也问了一些问题. 还是从头来说TDD吧,TDD作为敏捷开发领域的领头军,充满魅力,同时也充满争议.一切从三大军规说 ...

  5. MogileFS

    分布式文件系统 ~MogileFS~ 一.分布式文件系统 分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与 ...

  6. SZU:B54 Dual Palindromes

    Judge Info Memory Limit: 32768KB Case Time Limit: 10000MS Time Limit: 10000MS Judger: Number Only Ju ...

  7. hadoop大数据处理之表与表的连接

    hadoop大数据处理之表与表的连接 前言:  hadoop中表连接其实类似于我们用sqlserver对数据进行跨表查询时运用的inner join一样,两个连接的数据要有关系连接起来,中间必须有一个 ...

  8. WPF界面按钮美化

    在App.xaml里加入全局按钮样式 <Application x:Class="WpfButton.App" xmlns="http://schemas.micr ...

  9. 关于Django模板引擎的研究

    原创博文,转载请注明出处. 以前曾遇到过错误Reverse for ‘*’ with arguments '()' and keyword arguments' not found.1其原因是没有给视 ...

  10. vim复制

    关于vim复制剪贴粘贴命令的总结   最近在使用vim,感觉很好很强大,但是在使用复制剪切粘贴命令是,碰到了一些小困惑,网上找了一些资料感觉很不全,讲的也不好,遂自己进行实践并总结了. 首先是剪切(删 ...