您的位置:首页 > 编程语言 > C#

C#多态实现之虚方法

2013-07-19 21:28 267 查看
控制台应用程序中,新建一个People类文件,代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace _13多态
{
public class People
{
public People(string name)
{
this.Name = name;
}
public string Name
{
get;
set;
}

//1.第一,将父类中的方法标记为“虚方法”:virtual
//2.当一个方法是虚方法的时候,那么这个方法在子类中就可以被重写了。
//子类继承父类以后,可以直接使用该方法,也可以将该方法重写
public virtual void Show()
{
Console.WriteLine("哈哈哈!");
}
}

/// <summary>
/// 中国人
/// </summary>
public class Chinese : People
{
public Chinese(string name)
: base(name)
{

}
//3.子类如果要重写父类方法,则需要在子类的Show方法前,加一个override关键字,且有且只有这一个表示重写的override关键字。
public override void Show()
{
Console.WriteLine("我叫:{0},我是中国人!!",Name);
}
}

/// <summary>
/// 日本人
/// </summary>
public class Japanese : People
{
public Japanese(string name)
: base(name)
{

}
public override void Show()
{
Console.WriteLine("我叫:{0},我是日本人!!", Name);
}
}

/// <summary>
/// 美国人
/// </summary>
public class American : People
{
public American(string name)
: base(name)
{

}
public override void Show()
{
Console.WriteLine("我叫:{0},我是美国人!!", Name);
}
}
/// <summary>
/// 英国人
/// </summary>
public class English : People
{
public English(string name)
: base(name)
{

}
public override void Show()
{
Console.WriteLine("我叫:{0},我是英国人!!", Name);
}
}

}


在主程序Program中使用,代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace _13多态
{
//多态,即为多种表现形态;现实中就是事物的多种形态。在程序里,表现为父类的对象指向子类的实例,在调用方法时。调用的是子类重写的方法。
//实现手段:虚方法、接口、抽象类
//何时用多态??答:代码重用
class Program
{
static void Main(string[] args)
{
//面向对象重要原则
//对扩展开放,对修改关闭---开放封闭原则,扩展程序的同时不修改源代码
//格式设置热键:Ctrl+K+D:全局;Ctrl+K+F:选中部分:局部。
Chinese c1 = new Chinese("姚明");
Japanese j1 = new Japanese("向井");
American us1 = new American("T-Mac");
//添加一个
English en1 = new English("Tom");

//父类类型指向子类类型,即为实现多态
People p1 = new Chinese("刘翔");
People p2 = new Japanese("松下");

People[] cns = new People[] { c1, j1, us1, en1 };
//遍历数组中的每个元素,调用每个元素的Show方法
for (int i = 0; i < cns.Length; i++)
{
#region 第一种,只有三种国籍,还没有添加英国;旧版本
//判断当前的cns[i]中存储的对象是否是Chinese类型
if (cns[i] is Chinese)
{
//强制转换
Chinese cn = (Chinese)cns[i];
cn.Show();
}
else if (cns[i] is Japanese)
{
Japanese cn = (Japanese)cns[i];
cn.Show();
}
else if (cns[i] is American)
{
American cn = (American)cns[i];
cn.Show();
}
#endregion

#region 新版本
//在父类中添加virtual虚Show方法,通过cns[i]调用父类中的“虚方法”,进行判,
//如果子类重写了父类的Show方法,则调用子类的Show方法;否则调用父类的Show方法
//即:如果cns[i]中存储的是Chinese类型,则调用Chinese的Show方法;
//这就是多态的体现。
cns[i].Show();
#endregion
}
Console.WriteLine("ok");
Console.ReadKey();
}
}
}


Demo下载地址:http://download.csdn.net/detail/zxcvbnm32123/5785153
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: