using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Actor
{
public void DoShow()
{
Console.WriteLine("Doing a show...");
}
}
class Bandsman:Actor
{
// 子类同名方法隐藏父类方法
// 其实标准写法应该是:
// public new void DoShow(){...}
// 为了突出"同名",我把new省了,编译器会自动识别
public void DoShow()
{
Console.WriteLine("Playing musical instrument...");
}
}
class Guitarist:Bandsman
{
public new void DoShow()
{
Console.WriteLine("Playing a guitar solo...");
}
}
class Program
{
static void Main(string[] args)
{
// 正常声明
Actor actor = new Actor();
Bandsman bandsman = new Bandsman();
Guitarist guitarist = new Guitarist();
// 一般情况下,随着类的承继和方法的重写
// 方法是越来越具体、越来越个性化
actor.DoShow();
bandsman.DoShow();
guitarist.DoShow();
Console.WriteLine("===========================");
//尝试多态用法
Actor myActor1 = new Bandsman(); //正确:乐手是演员
Actor myActor2 = new Guitarist(); //正确:吉他手是演员
Bandsman myBandsman = new Guitarist(); //正确:吉他手是乐手
//仍然调用的是引用类型自身的方法,而非派生类的方法
myActor1.DoShow();
myActor2.DoShow();
myBandsman.DoShow();
Console.ReadLine();
}
}
}
结果: