lifengguo 's Blog

『 逆水行舟用力撑,一篙松劲退千寻!』

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
    public abstract class People   //abstract 说明类People是一个抽象类,不能被实例的
    {
        public People()
        {
        }

        public void Work()
        {
            MessageBox.Show("开始工作!");
        }

        public virtual void GetOffWork()   //虚函数,说明此方法可以被子类覆盖(override)
        {
            MessageBox.Show("下班啦!");
        }
    }

    public class Manage:People   //继承Popele类
    {
        public Manage()
        {
        }

        new public void Work()   //因为基类已经实现了Work方法,而在子类中又实现了Work方法,所以                                 //编译器会报警,在前面加上 new(隐藏基类方法),是将警报关闭。
        {
            base.Work();   //调节基类Popele的方法。显示“开始工作”
            //MessageBox.Show("管理员开始工作罗!");
        }

        public override void GetOffWork()      //覆盖基类的方法
        {
            MessageBox.Show("管理员下班啦");
        }
    }

    public class Employee():People
    {
       public Employee()
       {}

        new public void GetOffWork()      //virtual方法仍然可以 new
        {
            MessageBox.Show("职员下班啦!");
        }

    }

以上应该应该几点:
1、如果父类方法没有加virtual关键字,即不是一个虚方法,则在子类中只能隐藏基类方法,而不能覆盖。
2、如果父类方法加了virtual关键字,即它是一个虚方法,在子类中一样可以隐藏。
3、如果子类实现了父类相同的方法(相同的方法名称及签名),而没有new,在编译时会报警,但编译仍然能够通过!
3、调用父类方法:base.方法名()
4、abstract类是一个抽象类,不能被实例化

posted on 2007-06-13 13:02  黎锋果(peace)  阅读(392)  评论(1编辑  收藏  举报