public class Music {
public static void tune(Instrument i) {
// ...
i.play(Note.MIDDLE_C);
}
public static void main(String[] args) {
Wind flute = new Wind();
tune(flute); // Upcasting
}
}
当你像调用类型不匹配的函数,可以强制转换类型,就如同下面这种运行时识别类型。
class Useful {
public void f() {}
public void g() {}
}
class MoreUsefull extends Useful {
public void f() {}
public void g() {}
public void u() {}
public void v() {}
public void w() {}
}
public class RTTI {
public static void main(String[] args) {
Useful[] x = {
new Useful(),
new MoreUsefull()
};
x[0].f();
x[1].g();
((MoreUsefull)x[1]).u();
((MoreUsefull)x[1]).v();
((MoreUsefull)x[1]).w();
//((MoreUsefull)x[0]).u(); // Error: ClassCastException
}
}