Java继承多态面试题

1.多态的实现原理

Java继承多态面试题

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.子类的的初始化顺序

父类静态变量>父类静态块>子类静态变量>子类静态块>实例变量>实力块>构造方法