运行时多态、编译时多态和重载、重写的关系(不区分Java和C#,保证能看懂!)

以前在大学学习OOP的时候,知道了重载和重写的区别,但如果要把他们和多态联系起来,我想很多新手朋友和我当初一样是死记的,可是时间长了,自然而然就忘记了,最近在写测试的时候,终于“开窍”了。在这里和大家分享一下。

重载和重写我就不解释了,大家都知道,我现在主要是让大家记住 

                                                        重载是编译时多态,重写是运行时多态         这句话。
编译时可以理解为“编写”代码;运行时也就是代码执行。

好了,进入正题:

                public void A15GetSubKeyList()
        {

            /*我们在方法里面定义了两个String的变量token和topicvoteid,在定义好后,编译器会检查所定义的变量是否 复 合“要 求”,在定义好token后,编译器检查=后面的,分号“;”之前的数据参数是否满足条件,这里的条件是值,如果定义的是string,那么他就必须是string类型的(也就是说必须有引号“”),否则就不会通过编译,比如这里的 string topicvoteid = ;就会报错,通不过编译。

以上阶段大家可以粗浅的理解为“编译时”。等代码通过编译,开始运行了,就是“运行时”了。

*/

            string token = "";
            string topicvoteid = ;


            bool isChild = false;
            string papernums = "1";
            SubKeyList ret = _svr.GetSubKeyList(token, topicvoteid, isChild, papernums);
            Assert.IsNotNull(ret, "执行失败");
            

        }

回到正题,怎么把重载、重写和编译时、运行时联系起来呢?请继续往下看。

GetSubKeyList(token, topicvoteid, isChild, papernums)这个方法有4个参数,是重载的典型例子(可以再定义一个GetSubKeyList方法,无参数,即构成重载),当在编译器在编译时,自动检查参数类型,不符合的参数就报错。这样,我们就把重载和编译时联系起来了(除此之外,还有重载和编译时还有很多联系,这里只取最简单来解释)。

重写是子类对父类方法的“重新”定义,例如常见的“toString()”方法。编译时期只检查参数,不检查方法内部过程。只有当代码执行到具体的类别时,才会去调用该类“重写”的方法,所以,重写是运行时多态。

运行时多态、编译时多态和重载、重写的关系经常在面试中问道,但程度都不深,希望大家看了这篇博客后,结合自己写代码的量,做到真正理解多态。


猜你喜欢

转载自blog.csdn.net/qq_39767955/article/details/79455859