理论教育 Java程序设计:多态的体现及特点

Java程序设计:多态的体现及特点

时间:2023-10-18 理论教育 版权反馈
【摘要】:多态可以通过下面两个方面进行体现:父类引用变量指向子类对象。观察例5.10程序,满足多态的三个条件。当父类和子类具有相同的静态成员变量,那么在多态下,p访问的是父类的静态成员变量。通过阅读及观察例5.10程序,可以发现多态具有如下特点:对于非静态方法的调用,在编译运行时步骤。

Java程序设计:多态的体现及特点

多态可以通过下面两个方面进行体现:

(1)父类引用变量指向子类对象。

(2)父类引用也可以作为函数的参数接收自己的子类对象。

【例5.10】通过父类引用变量指向子类的对象来体现并观察多态。本例中定义Parent类和Child类,Child类继承于Parent类。Parent类的成员变量有,非静态成员变量x和静态成员变量y;成员方法有非静态方法eat()方法用于输出父类吃饭信息,静态方法sleep()方法用于输出父类说话信息。Child类的成员变量有,非静态成员变量x和静态成员变量y;成员方法有非静态方法eat()方法用于输出子类吃饭信息,静态方法sleep()方法用于输出子类说话信息。在主类Example5_10类的主方法中,用父类引用指向子类对象,阅读程序通过观察注释后的运行结果,体会父类引用调用到的成员变量及成员方法的区别。例5.10的三个类在同一个包中。

观察例5.10程序,满足多态的三个条件。当有Parent p = new Child(),p对父类和子类中的同名成员变量及成员方法的访问情况总结如下:

(1)当父类和子类具有相同的非静态成员变量,那么在多态下,p访问的是父类的成员变量。

(2)当父类和子类具有相同的静态成员变量,那么在多态下,p访问的是父类的静态成员变量。

(3)当父类和子类具有相同的非静态方法(即子类重写父类方法),多态下访问的是子类的成员方法。

(4)当父类和子类具有相同的静态方法(即子类重写父类静态方法),多态下访问的是父类的静态方法。(www.daowen.com)

通过阅读及观察例5.10程序,可以发现多态具有如下特点:

(1)对于非静态方法的调用,在编译运行时步骤。

① 编译时期,编译器检查引用型变量所属的类是否有调用的方法,如果有,编译通过;没有,编译失败。

② 运行时期,编译器检查对象所属类中是否有调用的方法,有就直接调用,没有时若父类中有此方法,则调用父类中的方法。

总之,非静态成员函数在多态下调用时,编译看左边,运行看右边。

(2)在多态中,对于成员变量(包括静态和非静态成员变量)引用,编译和运行都参考左边(即引用型变量所属的类)。

(3)在多态中,对于静态成员函数的引用,编译和运行都只参考左边。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈