俗话说“龙生九子,各不相同”,这可以作为类的多态性的一个比喻。例如,电话厂家都是通过模具来生产电话机的,模具就是一个类,而由该模具生产出来的电话机有千千万万,内部构造一样(继承了模具类),但颜色可以有很多种(多态性),如图4.2 所示。
图4.2 电话机的多态性
多态性还表现在对象之间的消息传递,也就是说,同一消息为不同的对象接收时可以产生完全不同的行动。例如在图4.3 中,用户单击打印按钮、退出按钮,操作相同(单击),接收对象不同(打印按钮、退出按钮),响应的动作不同:一个是打印文档,一个是关闭应用程序。利用多态性,就可以发送一个通用的信息,如单击鼠标,而将所有的实现细节都留给接收消息的对象自行决定,如打印按钮对象实现打印、退出按钮负责退出应用程序。当然,用户并不需要关心接收消息按钮的内部实现细节,因为这些细节已经被封装了。
图4.3 消息传递
继承的表现就是多态。也就是说,一个对象,多种形态。多态指在一般类中定义的属性和行为,被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为。
不管是男人还是女人,都属于人类(People)。男人类Man,女人类Woman,它们都继承自People(基类),如例4.1 所示。
例4.1:一个自我介绍的方法,介绍自己是男人还是女人,以刘德华和蔡依林为例。
People.java
Man.java
Woman.java(www.daowen.com)
Test.java(测试类)
以上程序运行结果如下:
一个父类可以有多个子类,在子类中可以重写父类的方法。这样每个子类里重写的代码不一样,自然表现形式就不一样。
下面以交通工具和汽车、火车为例。交通工具都有驾驶的方法,虽然继承自交通工具的汽车和火车也同样具有驾驶的方法,但是它们具体驾驶的方法不尽相同,如例4.2 所示。
例4.2:
Java 中没有多继承,而用接口实现了多继承。一个类可以同时实现多个接口,例如:
实现接口有利于代码功能的扩展(增加新的功能),而继承则有利于代码功能的修改(把旧的功能改成新的功能)。这里新功能的增加前提是不修改旧的功能,旧的功能仍然可以使用。旧类的代码也不做修改,将在后面的小节中介绍接口。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。