问:什么是重写(override)
答:子类继承父类,子类有一个与父类相同参数签名的方法,并且需要重新定义此方法,此为重写。
问:为什么要重写
答:子类可继承父类中的方法,而不需要重新编写相同的方法,但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。
方法重写又称方法覆盖,是父类与子类多态性的一种表现。若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法,如需父类中原有的方法,可使用super关键字,该关键字引用了当前类的父类。
重写遵守的两同两小一大原则:
问:重载(Overriding)的定义
答:在一个类中,如果出现了两个或者两个以上的同名函数,只要它们的参数的个数,参数的顺序或者参数的类型不同,即可称之为该函数重载了。
问:如何区分重载
答:当函数同名时,只看参数列表的区别,与返回值类型和修饰符没关系。
问:为什么要重载
答:方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数/类型。重载Overloading是一个类中多态性的一种表现。
重载的规则:
1.必须具有不同的参数列表;
2.可以有不同的返回类型,只要参数列表不同就可以了;
3.可以有不同的访问修饰符;
4.可以抛出不同的异常;
上面我们分析了重写和重载,其实它们都是多态的体现,我们就顺便把多态拿出来再看看:
答:什么是多态?
多态是面向对象的三大特征之一(封装,继承,多态),封装和继承几乎都是为多态而准备的.
多态指的是指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)
实现多态的技术称为:动态绑定(dynamic binding)
多态存在的三个必要条件
一、要有继承;
二、要有重写;
三、父类引用指向子类对象。
问:运行时多态与编译时多态
答:编译时多态主要指的是函数的重载,根据实际参数的数据类型、个数和次序,Java在编译时能够确定执行重载方法中的哪一个。运行时多态性主要运用到动态绑定,就是在运行时动态的确定调用的是哪一个函数。 方法覆盖表现出两种多态性,当对象引用本类实例时,为编译时多态,否则为运行时多态。