<span style="font-size:18px;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 多态之虚方法
{
public class Program
{
static void Main(string[] args)
{
// 多态:一个方法实现多种功能。
// 虚方法:将父类的函数标记为虚方法,使用关键字virtual,被标记为虚方法的函数,
// 可以被子类复写,使用关键字 override。
China c1 = new China("张三");
China c2 = new China("李四");
Japan j1 = new Japan("太郎");
Japan j2 = new Japan("次郎");
American a1 = new American("杰克");
American a2 = new American("麦克");
// 将子类的对象放入父类对象中。
Persion[] pers = { j1, j2, c1, c2, a1, a2 };
for (int i = 0; i < pers.Length; i++)
{
// 不使用多态的方法
//if (pers[i] is Japan)
// ((Japan)pers[i]).SayHello();
//if (pers[i] is China)
// ((China)pers[i]).SayHello();
//if (pers[i] is American)
// ((American)pers[i]).SayHello();
// 多态之虚方法,调用谁的方法要看父类对象中存放的是谁的对象。
pers[i].SayHello();
}
Console.ReadKey();
}
}
// 父类
public class Persion
{
public string Name { get; set; }
public Persion(string name)
{
this.Name = name;
}
// 用 virtual 修饰的方法是虚方法
public virtual void SayHello()
{
Console.WriteLine("我是人类!");
}
}
public class China : Persion
{
public China(string name)
: base(name) // 显示地调用父类的构造函数
{
}
// 使用关键字 override 重写父类的方法。
public override void SayHello()
{
Console.WriteLine("我是中国人,我叫{0}", this.Name);
}
}
public class Japan : Persion
{
public Japan(string name)
: base(name)
{
}
public override void SayHello()
{
Console.WriteLine("我是日本人,我叫{0}", this.Name);
}
}
public class American : Persion
{
public American(string name)
: base(name)
{
}
public override void SayHello()
{
Console.WriteLine("我是美国人,我叫{0}", this.Name);
}
}
}
</span>
C#学习笔记之多态之虚方法
最新推荐文章于 2021-06-20 10:43:27 发布