// 定义一个抽象的父类
    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. Windows上memcached的使用

    Memcached是什么?Memcached是由Danga Interactive开发的,高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度. Memcached能缓存什 ...

  2. Lex Yacc手册

    Python Lex Yacc手册 本文是PLY (Python Lex-Yacc)的中文翻译版.转载请注明出处.这里有更好的阅读体验. 如果你从事编译器或解析器的开发工作,你可能对lex和yacc不 ...

  3. iOS基础 - NSURLSession

    使用URLSession所有的网络访问都是有缓存的,缓存文件自动保存在tmp文件夹中,URLSession本身实现的时候,就是少量多次的! l 使用defaultSessionConfiguratio ...

  4. WPF开发的FTP文件上传工具

    前言 最近楼主在改版的项目里有使用到FTP上传文件,所以看到之前的项目里FTP上传的功能,然后抽个时间学习一番,做着做着就作出了这个工具了(虽然有些验证的功能没加上),但是基本的上传功能还是很好用的, ...

  5. query 原理

    query原理的简单分析,让你扒开jquery的小外套.   引言 最近LZ还在消化系统原理的第三章,因此这部分内容LZ打算再沉淀一下再写.本次LZ和各位来讨论一点前端的内容,其实有关jquery,在 ...

  6. ASP.NET MVC企业开发的基本环境

    ASP.NET MVC企业开发的基本环境[资源服务器概念] 学完了ASP.NET MVC4 IN ACTION 六波以后 企业开发演习 标签:AaronYang  茗洋  EasyUI1.3.4   ...

  7. 运用Unity实现依赖注入[结合简单三层实例]

    运用Unity实现依赖注入[结合简单三层实例] 一:理论部分 依赖注入:这是 Ioc 模式的一种特殊情况,是一种基于改变对象的行为而不改变类的内部的接口编程技术.开发人员编写实现接口的类代码,并基于接 ...

  8. Aliexpress API 测试工具

    Aliexpress API 测试工具 上回简单说了 Aliexpress API 的认证流程, 这回在奉送一个小工具, API 测试工具. 点我下载 做这一行,和做程序员的生活完全不搭调, 格格不入 ...

  9. C Socket初探

    C Socket初探 前段时间写了个C# Socket初探,这次再写个C语言的Socket博文,运行效果如下: 实现步骤: 1. Server端 #include <stdio.h> // ...

  10. 大数据应用日志采集之Scribe 安装配置指南

    大数据应用日志采集之Scribe 安装配置指南 大数据应用日志采集之Scribe 安装配置指南 1.概述 Scribe是Facebook开源的日志收集系统,在Facebook内部已经得到大量的应用.它 ...