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里的方法)

 

 }

 

 

 

 

结果如下:

 

 

 

 

 

posted @ 2012-04-18 12:07  左少白  阅读(219)  评论(0编辑  收藏  举报