c# 多态
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleExample
{
class 哥
{
public virtual void draw()
{
Console.WriteLine("哥来做事,你们可以偷偷乐了");
}
public void ff()
{
Console.WriteLine("哥的FF方法");
}
}
class 小弟 : 哥
{
public override void draw()
{
Console.WriteLine("小弟不用哥的,小弟要单干");
//base.draw();
}
public new void ff()
{
Console.WriteLine("小第的FF方法");
}
}
class 小妹 : 哥
{
public new void ff()
{
Console.WriteLine("小妹的FF方法");
}
}
}
public static void Main()
{
哥[] father = new 哥[3];
father[0] = new 哥();
father[1] = new 小弟();
father[2] = new 小妹();
foreach (哥 t in father)
{
t.draw(); //调用实际的重写对象的方法(子类里面,如果override 了draw方法,调用它,没有就调用父类的draw方法)
}
小弟 tt = new 小弟();
tt.draw(); //调用实际的重写对象的方法(子类里面,如果override 了draw方法,调用它,没有就调用父类的draw方法)
tt.ff(); //调用本类的方法(小第里面的方法)
哥 bb = tt;
bb.draw(); //调用实际的重写对象的方法(子类里面,如果override 了draw方法,调用它,没有就调用父类的draw方法)
bb.ff(); //调用本类的方法 (哥里的方法)
哥 cc = new 小妹();
cc.draw(); //调用实际的重写对象的方法(子类里面,如果override 了draw方法,调用它,没有就调用父类的draw方法)
cc.ff(); //本类的方法(哥里的方法,是非虚方法)
哥 gg = new 小弟();
((小弟)gg).draw();//调用实际的重写对象的方法(类小弟里面,如果override 了draw方法,调用它,没有就调用父类的draw方法)
((小弟)gg).ff(); //类小弟的方法(base里的方法)
}
结果如下: