Unity - A计划(永久有效期) 扫二维码继续学习 二维码时效为半小时

(197评价)
价格: 4431.00元
虚方法的问题
shuaibi发起了话题2017-08-12
2
回复
551
浏览

class Boss : Enemy
    {
        public override void Move()
        {
            Console.WriteLine("这里是Boss的共有Move方法");
        }

        public void Attack()
        {
            Console.WriteLine("Boss正在进行攻击");
            Move();
        }
    }

 

如果单纯用override函数写一遍的话是不会输出是吗?如果调用的呢?

为什么要在这个Attack的方法里面重写一遍?不是很理解,请解答,谢谢。

所有回复
  • sdhexu 2017-08-12

    虚方法来自类的思想。

    假设有一个动物类,每种动物有不同的叫声,你有一个笼子类来管理各种不同的动物,你不知道笼子里动物都是什么动物。你只能枚举笼子里的动物,然后调用动物类里面的“叫声”方法。这时候,如果这个动物是狗,那么他应该会叫“旺旺”,如果是猫,他应该会叫“喵喵”,使用虚方法,你可以不必关系动物具体是什么动物,只要知道它是个动物就好了。

    class 动物

    {

          public vritual void 叫声()   { }

    }

    class 狗 : 动物

    {

        public override void 叫声 () { print("旺旺"); }

    }

    class 猫 : 动物

    {

        public override void 叫声() { print(“喵喵”); }

    }

     

    class 笼子

    {

        protected List<动物>   m_aniLists;

        public void 把一个动物放进笼子( 动物   a )

        {

                m_aniLists.Add( a );

        }

        public void 让动物们叫()

        {

                  foreach( 动物 a in m_aniLists )

                 {

                         a.叫声();

                 }

        }

    }

     

    class Program {

         static void main(){

                  笼子   lz = new 笼子();  // 创建一个笼子

                  lz.把动物关进笼子(    new 狗());      // 把一只狗关进笼子

                  lz.把动物关进笼子( new 猫());   // 把一只猫关进笼子

                  lz.让动物们叫();   // 让动物们自己叫

        }

    }

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
  • siki 2017-08-13

    你这里Move是重写的父类里面的,这个只有不同的子类都有不同的Move方法的情况下,才需要重写,如果大家的移动方法是一样的,那就不需要重写了,所以这个需不需要重写是根据需求来的

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
发表回复
你还没有登录,请先 登录或 注册!