Java 多态
多态是同一个行为具有多个不同表现形式或形态的能力。
多态就是同一个接口,使用不同的实例而执行不同操作,如图所示:
多态性是对象多种表现形式的体现。
现实中,比如我们按下 F1 键这个动作:
如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档;
如果当前在 Word 下弹出的就是 Word 帮助;
在 Windows 下弹出的就是 Windows 帮助和支持。
同一个事件发生在不同的对象上会产生不同的结果。
多态的优点
- 消除类型之间的耦合关系
- 可替换性
- 可扩充性
- 接口性
- 灵活性
- 简化性
多态存在的三个必要条件
- 继承
- 重写
- 父类引用指向子类对象:Parent p = new Child();
多态案例
编写程序实现乐手弹奏乐器。
乐手可以弹奏不同的乐器从而发出不同的声音可以弹奏的乐器包括二胡、钢琴和小提琴。
1、定义乐器类Instrument,包括方法makeSound()
2、定义乐器类的子类:二胡Erhu、钢琴Piano和小提琴Violin
3、定义乐手类Musician,可以弹奏各种乐器play(Instrument i)
4、定义测试类,给乐手不同的乐器让他弹奏
Musician.java
package dt;
/**
* 乐手类
*
* @author
*
*/
public class Musician {
public static void play(Instrument instrument) {
instrument.makeSound();
}
}
Erhu.java
package dt;
/**
* 二胡类
*
* @author
*
*/
public class Erhu extends Instrument {
@Override
public void makeSound() {
System.out.println("二胡声...二泉映月..");
}
}
Instrument.java
package dt;
/**
* 乐器类
*
* @author
*
*/
public class Instrument {
public void makeSound() {
System.out.println("乐器...发出声音...");
}
}
Piano.java
package dt;
/**
* 钢琴类
*
* @author
*
*/
public class Piano extends Instrument {
@Override
public void makeSound() {
System.out.println("钢琴声...命运交响曲...");
}
}
Violin.java
package dt;
/**
* 小提琴类
*
* @author
*
*/
public class Violin extends Instrument {
@Override
public void makeSound() {
System.out.println("小提琴声音..梁祝...");
}
}
Test.java
package dt;
import java.util.Random;
/**
* 测试类
*
* @author
*
*/
public class Test {
public static Instrument getInstrument() {
Instrument i = null;
Random r = new Random();
if(r.nextInt(3) == 0) {
i = new Piano();
}else if(r.nextInt(3) == 1) {
i = new Violin();
}else {
i = new Erhu();
}
return i;
}
public static void main(String[] args) {
Musician m = new Musician();
// Instrument i1 = new Piano();
// Instrument i2 = new Erhu();
// Instrument i3 = new Violin();
// m.play(i1);
// m.play(i2);
// m.play(i3);
Instrument i4 = null;
i4 = getInstrument();
m.play(i4);
}
}