Thinking in Java --多态
在java对象中,对象既可以作为他自己本身的类型使用,也可以作为他的基类型使用,把这种对积累性的引用的做法称为向上转型
package com.paragraph.one; public enum Note{ MIDDLE_C,C_SHARP,B_FLAT; }
package com.paragraph.one; public class Instrument { public Instrument() { // TODO Auto-generated constructor stub System.out.println("Instrument"); } public void play(Note n){ System.out.println("Instrument.play()"); } }
package com.paragraph.one; public class Wind extends Instrument{ public Wind() { // TODO Auto-generated constructor stub System.out.println("Wind"); } public void play(Note n){ System.out.println("Wind.play"+n); } }
package com.paragraph.one; public class Music { public static void tune(Instrument i){ System.out.println(i); i.play(Note.MIDDLE_C); } public static void main(String[] args) { Wind fluteWind = new Wind(); System.out.println(fluteWind); tune(fluteWind); } }
输出结果为:
Instrument
Wind
com.paragraph.one.Wind@1d2fc36
com.paragraph.one.Wind@1d2fc36
Wind.playMIDDLE_C
要注意上面调用的是wind的方法,而不是基类的方法。
将一个方法调用同一个方法主体关联起来称为绑定,在程序执行之前进行绑定称为前期绑定,一般的C语言等面向过程语言只支持前期绑定,面向过程语言提供了一种后期绑定。
java中除了static方法和final方法之外,其他的方法都是后期绑定,所以前面的是输出的wind的方法,但是如果加上static方法,就会调用Instrument中的play方法了
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。