Java继承多态面试题
1.多态的实现原理
2.面向对象的特征之一——多态
2.1多态的定义
多态是同一个行为具有不同的表现形式或形态的能力。允许不同类的对象对同一消息做出响应,同一消息可以根据发送的对象不同采用不同的行为方式。
对于面向对象,多态分为编译时多态和运行时多态,编译时多态是静态的,主要是指方法的重载,它是根据参数列表的不同来区分不同的函数。通过编译后会产生两个不同的函数。在运行时谈不上多态。而运行时多态是动态的,通过动态绑来实现。
2.2多态的条件
发生动态绑定(动多态)的三个条件。
(1)继承
(2)重写
(3) 向上造型(积累引用引用派生类对象)
向上造型就是定义基类的引用,引用派生类的对象。People people=new Student();people引用出来的方法是父类的方法接口。但是方法的实现是子类的方法实现。向上转型时,子类单独定义的方法会丢失,子类引用不能指向父类对象。向上转型可以减少重复代码,使代码变得简洁。提高系统扩展性。
2.3多态的优点
(1)可替换性:动态对已存在的代码具有可替换性。
(2)可扩充性:动态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性。以及其他特性的运行和操作。实际新加子类更容易获得多台功能。
(3)多态是父类通过方法申明。向子类提供一个共同接口。有子类完善或者覆盖它而实现。
3.方法重写和重载的区别
3.1 方法重写
在java程序中,子类在继承父类的同时需要定义一些写的特征,需要修改父类的一些方法进行扩展,增大功能。这样的方法通常称为重写,也称覆盖或者复写。子类重写父类,拥有与父类相同的方法名,参数类型、参数个数、返回值类型。
当子类重写了父类的方法,调用的时候调用的重写过的方法,但是如果需要调用父类的方法。可以使用super关键字来实现。super关键字可以从子类访问父类的方法。如果要访问被重写过的方法,使用super.方法名(参数列表)的形式调用。
3.2 方法重载
方法重载是指在一个类中。多个方法的方法名形同,参数列表不同,参数列表不同指参数类型、参数个数、参数顺序不同。
方法重载时,方法之间一般具有连续性,可以提高程序的可读性,一般只重载功能相似的方法。Java虚拟机根据不同的参数列表
来选择合适的方法执行。
3.3 区别
区别 | 重载 | 重写 |
定义 | 方法名相同,参数列表不同(参数类型、参数个数) | 方法名称、参数列表相同 (参数类型、参数个数、返回值类型) |
对权限没有要求 | 被重写的方法不能拥有更高的权限 | |
范围 | 发生在一个类中 | 发生在继承类中 |
4.子类的的初始化顺序
父类静态变量>父类静态块>子类静态变量>子类静态块>实例变量>实力块>构造方法