A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 一片白 中级黑马   /  2014-4-30 15:13  /  1128 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 一片白 于 2014-5-4 16:08 编辑

①c#实现多态的方式有几种?
②c#实现多态的方式分别是什么?如果可以,请举例说明下。

4 个回复

倒序浏览
本帖最后由 许庭洲 于 2014-4-30 16:41 编辑

//多态性通过派生类重载基类中的虚函数型方法来实现
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
using System;
class Vehicle//定义汽车类
{
        public int wheels;//公有成员:轮子个数
        protected float weight;//保护成员;重量
        public Vehicle(int w,float g)
        {
               wheels=w;
               weight=g;
         }
         public virtual void Speak()
         {
               Console.WriteLine("the w vehicle is speaking!");
         }
};
class Car:Vehicle//定义轿车类
{
         int passengers;//私有成员:乘客数
         public Car(int w,float g,int p):base(w,g)
         {
                 wheels=w;
                 weight=g;
                 passengers=p;
          }
          public override void Speak()
          {
                  Console.WriteLine("the Car vehicle is speaking: Di-di!");
          }
}
class Truck:Vehicle//定义卡车类
{
          int passengers;//私有成员:乘客数
          float load;//私有成员:载重量
          public Truck(int w,float g,int p,float l):base(w,g)
          {
                    wheels=w;
                    weight=g;
                    passengers=p;
                    load=1;
          }
          public override void Speak()
         {
                Console.WriteLine("the Truckvehicle is speaking: Ba-ba!");
         }
}
class Test
{
        public static void Main()
        {
                 Vehicle v1=new Vehicle();
                 Car c1=new Car(4,2,5);
                 Truck t1=new Truck(6,5,3,10);
                 v1.Speak();
                 v1=c1;
                 v1.Speak();
                 c1.Spreak();
                 v1=t1;
                 v1.Speak();
                 t1.Speak();
    }
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1.Vehicle类中的Speak方法被声明为虚方法,那么在派生类中就可以重新定义此方法;
2.在派生类Car和Truck中分别重载了Speak方法,派生类中的方法原型和基类中的方法原型必须完全一致。
3.在Test类中,创建了Vehicle类实例v1,并且先后指向Car类的实例c1和Truck类的实例t1。
4.运行改程序,结果因该是:
   The Vehicle is speaking!
   The Car is speaking: Di-di!
   The Car is speaking: Di-di!
   The truck is speaking: Ba-ba!
   The truck is speaking: Ba-ba!

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
本帖最后由 鲤鱼 于 2014-4-30 22:56 编辑

算了。你看楼上总结的吧

点评

连我发的什么都不看的就别说了好么。  发表于 2014-4-30 22:57
上次跟你讲了,最好自己总结哦  发表于 2014-4-30 22:44
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马