zoukankan      html  css  js  c++  java
  • c# 虚方法(virtual)与 多态(Polymorphism)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    //虚方法(virtual)
    //virtual 关键字用于修饰方法、属性、索引器或事件声明,并且允许在派生类中重写这些对象。
    //多态(Polymorphism)
    //多态是指两个或多个属于不同类的对象,对同一个消息做出不同响应的能力。
    namespace 虚方法
    {
        class A
        {
            public virtual void F()
            {
                Console.WriteLine("A.F");
            }
        }
        class B : A
        {
            public override void F()
            {
                Console.WriteLine("B.F");
            }
        }
        class Program
        {
            static void Main(string[] args)
            {
                B b = new B();
                A a = b;
                a.F();  //"B.F"
                b.F();  //"B.F"
                Console.ReadKey();
            }
        }
    }
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace 虚方法1
    {
        //员工类
        class Employee
        {
            protected string _name;
            public Employee()
            {
    
            }
            public Employee(string name)
            {
                _name = name;
            }
    
            public virtual void StartWork()  //虚方法
            {
                Console.Write(_name + "开始工作:");
            }
        }
        //经理类
        class Manager : Employee  
        {
            //public Manager(string name)
            //{
            //    base._name = name;
            //}
            //构造函数
            public Manager(string name): base(name) //赋值给基类(Employee)构造函数name
            {
    
            }
            //重写虚方法
            public override void StartWork()  //使用虚方法实现面向对象的多态
            {
                base.StartWork();   //调用基类的方法
                Console.WriteLine("给员工下达任务");
            }
        }
        //秘书类
        class Secretary : Employee
        {
            public Secretary(string name) : base(name) { }
            public override void StartWork()
            {
                base.StartWork();
                Console.WriteLine("协助经理");
            }
        }
        //销售类
        class Seller : Employee
        {
            public Seller(string name) : base(name) { }
            public override void StartWork()
            {
                base.StartWork();
                Console.WriteLine("销售产品");
            }
        }
        //财务类
        class Accountant : Employee
        {
            public Accountant(string name) : base(name) { }
            public override void StartWork()
            {
                base.StartWork();
                Console.WriteLine("管理公司财政");
            }
        }
        class Program
        {
            static void Main(string[] args)
            {
                Employee[] emp = new Employee[5];
                emp[0] = new Manager("张三");
                emp[1] = new Secretary("李四");
                emp[2] = new Seller("王五");
                emp[3] = new Seller("马六");
                emp[4] = new Accountant("钱七");
                Console.WriteLine("早上8点,开始工作");
                foreach (Employee e in emp)
                {
                    e.StartWork();
                }
                Console.ReadKey();
            }
        }
    }
  • 相关阅读:
    最新版Butterknife plugin支持butterknife7.0.1和兼容butterknife 6.1.0及下面
    Cocos2D中Action的进阶使用技巧(一)
    开源库Fab-Transformation简单使用解析
    tip of Firefox extention foxyproxy
    jQuery树形菜单,使用zTree插件,异步载入 & 编辑功能&Check 共存
    创建数据库以及其属性的sql语句
    Node.js开发入门—使用AngularJS
    自己动手写shell命令之ls
    剑指 | 7-利用两个栈构建一个队列
    css3使用transform属性制作js弹性运动
  • 原文地址:https://www.cnblogs.com/han1982/p/3201932.html
Copyright © 2011-2022 走看看