首页 > 代码库 > Thinking in Java --多态
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方法了
Thinking in Java --多态
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。