面向对象特征之三:多态性:
1、理解多态:可以理解为一个事物的多种形态
2、何为多态:
对象的多态性,父类的应用指向子类的对象
3、多态的使用:虚拟方法调用
有了对象的多态性之后我们在编译期,只能调用父类中声明的方法,但是在运行期,我们实际执行的是子类重写父类的方法。
虚拟方法调用
子类定义了与父类同名同参数的方法,在多态情况下,将此事父类的方法称为虚拟方法,父类根据赋给它的不同子类对象,动态调用子类的该方法。这样的方法调用在编译期是无法确定的
区分重写和重载:
一、定义上的区别
1、重载是指不同的函数使用相同的函数名,但是函数的参数个数或类型不同。调用的时候根据函数的参数来区别不同的函数。
2、覆盖(也叫重写)是指在派生类中重新对基类中的虚函数(注意是虚函数)重新实现。即函数名和参数都一样,只是函数的实现体不一样。
二、规则上的不同:
1、重载的规则:
①必须具有不同的参数列表。
②可以有不同的访问修饰符。
③可以抛出不同的异常。
2、重写方法的规则:
①参数列表必须完全与被重写的方法相同,否则不能称其为重写而是重载。
②返回 的类型必须一直与被重写的方法的返du类型相同,否则不能称其为重写而是重载。
③访问修饰符的限制一定要大于被重写方法的访问修饰符。
④重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常。
重载不表现为多态性;重写表现为多态性
基本数据类型、包装类、String三者之间如何转化:
自动装箱、自动拆箱 Integer i = 10;基本数据类型、包装类-->String:valueOf(Xxx xxx) String-->基本数据类型、包装类:parseXxx(String s)