zoukankan      html  css  js  c++  java
  • 类的多态性


                //    类的多态
                //    多态就是指在程序运行时,执行的虽然是一个调用方法的语句,却可以根据派生类对象的类型的不同完成方法不同的具体实现

            //    当派生类从基类继承时,它会获得积累的所有方法,字段,属性,和事件.派生类可以选择:
                //    1.继承最接近的基类方法而不是重写它
                //    2.重写基类中的虚拟成员.
                //    3.定义隐藏类实现的成员的新非虚实现

                //    实现多态的方法:   1.虚方法 :将父类的方法标记为虚方法,使用关键字virtual,此方法可以在子类中可以重写(重写使用关键字override)
                //                    2.抽象类和抽象方法:如果我们不需要使用父类创建对象,它的存在只是为了供子类继承.可以将父类写成抽象类(关键字abstract)
                //        将父类方法写成抽象方法,子类中的方法仍然用关键字override重写;
                //                    3. 接口实现;

                //    抽象类: 不需要使用基类实例化的对象;
                //    虚方法: 需要使用基类实例化的对象;

                //    我们选择使用虚方法实现多态还是抽象类抽象方法实现多态,取决于我们是否需要使用基类实例化的对象

                Clerk myClerk = new Clerk ();  //  new 创建一个对象
                ProjectManager myPm = new ProjectManager ();
                Clerk[] clerk = { myClerk, myPm };        //    用数组调用
                foreach (Clerk outclerk in clerk) 
                    outclerk.WorkPlan();

        // 错误写法      Drink myMilk = new Drink ();        抽象类是不允许创建实例的

                Drink myMilk = new Milk ();        //    必须用子类来调用
                Drink myTea = new Tea ();
                Drink [] drink={myMilk,myTea};
                foreach (Drink outdrink in drink) 
                    outdrink.drink();

                Console.ReadKey ();
            }
        }
         //    实例1:    职员需要有工作计划,经理也需要有工作计划
        //    分析:  现在有一个Cleck类作为父类, ProjectManager 类继承自Cleck, 因为需要父类创建的对象,所以用虚方法来实现多态

        //    虚方法:
        class Clerk{
            public virtual void WorkPlan(){        //声明虚方法
                Console.WriteLine ("我是职员,我需要有工作计划");
            }
        }

        class ProjectManager:Clerk{
            public override void WorkPlan(){        //    重写基类方法
                Console.WriteLine ("我是项目经理,我也需要有工作计划");
            }
        }

        //    实例2:  茶可以解渴,牛奶也可以解渴;        

      //     分析: 没有基类  所以需要从新声明一个基类  drink;
        //          tea 和 milk都是属于Drink类, 而我们需要使用milk和tea创建的对象,而根本不需要使用Drink创建的对象,所以可以使用抽象类抽象方法 

        // 抽象方法:

        abstract class Drink{    //  创建一个名为Drink的父类
            public abstract void drink();
            //利用抽象来实现类抽象化,然后方法抽象化,方法中不能有方法体;

    //        {
    //            Console.WriteLine ("我是饮料,可以解渴");
    //        }
        }
     class Milk:Drink{  //  创建一个Milk的子类,继承与Drink父类
            public override void drink(){        //    重写
                Console.WriteLine ("我是牛奶,我可以解渴");
            }
        }

        class Tea:Drink{  //  创建一个Tea的子类,继承与Drink父类
            public override void drink(){
                Console.WriteLine ("我是茶,我可以解渴");
            }
        }

  • 相关阅读:
    css sprites图片背景优化技术
    CSS3新特性(整理贴)
    span HTML元素
    jQuery1.2选择器(2)
    JavaScript 弹出窗口总结
    jQuery1.2选择器(1)
    jquery如何判断checkbox(复选框)是否被选中
    使用 Lightbox 2 和 JavaScript 构建出色的图片库
    如何在一台电脑同时安装IE6、IE7、FF2、FF3进行网页调试
    IE的有条件注释详解(附实例代码)
  • 原文地址:https://www.cnblogs.com/fengjiulin110120/p/6616606.html
Copyright © 2011-2022 走看看