Философия Java

         

Повторение приведения к базовому типу


В главе 6, Вы могли видеть, как можно использовать объект как своего собственного типа или в качестве базового типа. Получение ссылки на объект и привидение ее к типу базового класса называется "приведение к базовому типу", поскольку путь деревьев наследования растет сверху от базового класса.

Вы так же видели возникшую проблему истекающую из следующего:

//: c07:music:Music.java

// Наследование и приведение к базовому типу.

class Note { private int value; private Note(int val) { value = val; } public static final Note MIDDLE_C = new Note(0), C_SHARP = new Note(1), B_FLAT = new Note(2); } // И т.д.

class Instrument { public void play(Note n) { System.out.println("Instrument.play()"); } }

// Объект Wind так же и instruments

// поскольку у них общий интерфейс:

class Wind extends Instrument { // Переопределение метода:

public void play(Note n) { System.out.println("Wind.play()"); } }

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); // Приведение к базовому типу

} } ///:~

Метод Music.tune( )

принимает ссылки на Instrument, а так же на все, что произошло от Instrument. В main( ), Вы можете увидеть как это происходит, ссылка на Wind передается tune( ), без нужного преобразования типов. Интерфейс Instrument при этом должен существовать в Wind, поскольку Wind произошел от Instrument. Преобразование типа из Wind к Instrument может уменьшить интерфейс, но при этом он не будет меньше, чем весь интерфейс Instrument.



Содержание раздела