重载是编译时的多态性
⑴ 方法重载和方法重构导致了多态 对不对
这是其中的一种多态;
在JAVA中有两种多态是指:运行时多态和编译时多态。
对于多个同名方法,如果在编译时能够确定执行同名方法中的哪一个,则称为编译时多态性.
如果在编译时不能确定,只能在运行时才能确定执行多个同名方法中的哪一个,则称为运行时多态性.
所以,一般情况下,重载指的是编译时多态,重写是运行时多态;因为重载是在编译时就知道调用哪个方法;而如果是子类实例调用父类方法,那么需要运行时才能知道调用什么方法,故为运行时多态;
补充一下:不知道你写的重构指的是重载还是调整代码
⑵ C++支持两种类型的多态性:_________、运行时多态
(1)编译时的多态性
编译时的多态性是通过重载来实现的。对于非虚的成员来说,系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操作。
(2)运行时的多态性
运行时的多态性就是指直到系统运行时,才根据实际情况决定实现何种操作。C++中,运行时的多态性通过虚成员实现。
⑶ 什么是静态多态性它和重载有何不同
多态性的实现与静态联编、动态联编有关。静态联编支持的多态性称为编译时的多态性,也称静态多态性,它是通过函数重载和运算符重载实现的。动态联编支持的多态性称为运行时的多态性,也称动态多态性,它是通过继承和虚函数实现的。
C++允许在参数类型不同的前提下重载函数。重载的函数与具有多态性的函数(即虚函数)不同处在于:调用正确的被重载函数实体是在编译期间就被决定了的;而对于具有多态性的函数来说,是通过运行期间的动态绑定来调用我们想调用的那个函数实体。多态性是通过重定义(或重写)这种方式达成的。请不要被重载(overloading)和重写(overriding)所迷惑。重载是发生在两个或者是更多的函数具有相同的名字的情况下。区分它们的办法是通过检测它们的参数个数或者类型来实现的。重载与CLOS中的多重分发(multiple dispatching)不同,对于参数的多重分发是在运行期间多态完成的。
⑷ 1. 编译时的多态性与运行时的多态性有什么区别,他们的实现方法有什么不同
多态从实现的角度可以划为两类:编译时多态和运行时多态。
编译时的多态性:就是在程序编译的时候,也就是生成解决方案的时候就决定要实现什么操作。
运行时的多态性:就是指直到系统运行时,才根据实际情况决定实现何种操作。
1、多态实现形式不同:
编译时的多态是通过静态连编来实现的;运行时的多态是用动态连编来实现的。
2、多态性通过方式不同:
编译时的多态性主要是通过函数重载和运算符重载来实现的;运行时的多态性主要是通过虚函数来实现的。
(4)重载是编译时的多态性扩展阅读:
静态多态性又称编译时的多态性。静态多态性的函数调用速度快、效率高但缺乏灵活性,在程序运行前就应决定执行的函数和方法。
动态多态性的特点是:不在编译时确定调用的是哪个函数,而是在程序运行过程中才动态地确定操作所针对的对象。又称运行时的多态性。动态多态性是通过虚函数(virtual function)实现的。
⑸ 重写和重载的区别
这两个词语的区别在于定义、范围、规则。
1、定义:重载是定义相同的方法名,参数不同;重写是子类重写父类的方法。
2、范围:重载是在一个类中,是编译时的多态性;重写是子类与父类之间的,是运行时的多态性。
3、规则:重载对返回类型没有要求,参数个数、参数类型、参数顺序可以不同,访问修饰符没有特殊要求;重写要求返回类型有兼容的返回类型,参数列表必须完全与被重写的方法相同,访问修饰符的限制一定要大于被重写方法的访问修饰符,重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常。