在程序His Triangle5Test.java中第5行,为什么不一开始就将变量的声明类型和对象的实际类型保持一致,例如改成语句“His Triangle5 t=new His Triangle5(6,8,10);”?如果变量声明类型和实际运行对象类型保持一致,就不会出现多态效果。
需要强调的是,多态是面向对象程序的三大特征之一,多态的出现可以方便程序的通用设计。例如在方法声明中,如果将参数类型定义为父类型,则该参数可以接收任何子类的值。
【例4-7】
设计用例演示参数传递中的多态效果。
在JDK类库中查看java.lang.Object类源代码,找到equals方法实现,如图4-22所示。
图4-22 Object类equals方法实现
Object类中equals方法的实现是检测两个引用变量的地址值是否相同,而自定义类中,如果需要提供判断两个对象是否相等的功能,需要重写继承自Object类的该方法。复制cn.linaw.chapter4.demo01包下His Triangle5类,在同一个包下粘贴,并更名为His Triangle6。打开His Triangle6.java文件,重写equals方法,两个His Triangle6对象相等的依据是判断它们的面积是否相等,如图4-23所示。(www.xing528.com)
图4-23 在HisTriangle6类中重写父类equals方法
在本例中,Object类是基类,因为有了多态,父类引用可以指向子类对象,因此,开发中常常可以设定一个Object类型的参数来接收任意类型的子类对象。如果没有多态性,那么类中就需要为equals方法根据不同参数列表写若干个重载方法。
下面通过一个测试类His Triangle6Test来验证His Triangle6类的equals方法,如图4-24所示。
图4-24 验证HisTriangle6类的equals方法
关注程序第7行和第8行中equals方法中分别传入了不同类型的实参,这是多态性的体现。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。