Служит для создания расширяемых программ (добавления новых возможностей). Полиморфизм – это различное действие методов, которые вызываются через базовый класс для разных наследников.
class Note {
private String noteName;
private Note (String nN) {noteName = nN;}
public static final Note MIDDLE_C = new Note (“Middle C”),
C _SHARP = new Note (“C Sharp”)……;
public String to String () {return noteName;}
}
class Instrument {
public void play (Note n) {
System.out.println (“Instrument.play ()”);
}
}
public class Wind extends Instrument {
public void play (Note n) {
System.out.println (“Wind.play ()” + n);
}
}
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 (приведение) к базовому классу
}
}
Выполняется метод того класса к которому реально относится объект. В данном случае метод класса Wind. Это называется полиморфизм. Будет напечатано: Wind. Play () Middle C.
Пример upcasting через оператор return:
private Random rand = new Random (47);
public Shape next (){
switch (rand.next Int(3)) {
default:
case 0: return new Circle ();
case 1: return new Square ();
case 2: return new Triange ();
}
______________________________________________________
Shape s = new Circle ();
s.draw (); / вызывается Circle.draw
upcasting может уменьшить количество доступных у класса методов (у Wind их может быть больше, но все методы Instrument есть всегда).