多态经过分离作什么和怎么作,从另外一角度将接口和实现分离出来。bash
把某个对象的引用视为对其及类型的引用的作法被称做向上转型dom
//建立乐器基类
class Instrument{
public void play(Note n){
print("Instrument.play()");
}
}
public class Wind extends Instrument{
public void play(Note n){
print("Wind.play()"+n);
}
}
public class Brass extends Instrument{
public void play(Note n){
print("Brass.play()"+n);
}
}
public class Music{
public static void tune(Instrument i){
i.play()
}
main(String[] args){
Wind w = new Wind();
tune(w) //Wind.play()
}
}复制代码
Wind 是从Instrument继承的,因此Instrument的接口一定存在Wind中,从Wind向上转型到Instrument会“缩小”接口。ui
编译器怎么知道Instrument引用指向的是Wind对象,而不是Brass对象?spa
绑定:将一个方法调用与方法主体关联起来称做绑定。code
//基类
public class Shape{
public void draw(){
}
public void erase(){
}
}
public class Circle extends Shape{
public void draw(){
print("Circle draw");
}
public void erase(){
print("Circle erase");
}
}
public class Square extends Shape{
public void draw(){
print("Square draw");
}
public void erase(){
print("Square erase");
}
}
public class Triangle extends Shape{
public void draw(){
print("Triangle draw");
}
public void erase(){
print("Triangle erase");
}
}
public class RandomShape{
}复制代码