上溯造型的问题
当前位置:以往代写 > JAVA 教程 >上溯造型的问题
2019-06-14

上溯造型的问题

上溯造型的问题

在第6章,各人已知道可将一个工具作为它本身的范例利用,可能作为它的基本范例的一个工具利用。取得一个工具句柄,并将其作为基本范例句柄利用的行为就叫作“上溯造型”——因为担任树的画法是基本类位于最上方。
但这样做也会碰着一个问题,如下例所示(若执行这个措施碰着贫苦,请参考第3章的3.1.2小节“赋值”):

//: Music.java 
// Inheritance & upcasting
package c07;

class Note {
  private int value;
  private Note(int val) { value = val; }
  public static final Note
    middleC = new Note(0), 
    cSharp = new Note(1),
    cFlat = new Note(2);
} // Etc.

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

// Wind objects are instruments
// because they have the same interface:
class Wind extends Instrument {
  // Redefine interface method:
  public void play(Note n) {
    System.out.println("Wind.play()");
  }
}

public class Music {
  public static void tune(Instrument i) {
    // ...
    i.play(Note.middleC);
  }
  public static void main(String[] args) {
    Wind flute = new Wind();
    tune(flute); // Upcasting
  }
} ///:~

个中,要领Music.tune()吸收一个Instrument句柄,同时也吸收从Instrument衍生出来的所有对象。当一个Wind句柄通报给tune()的时候,就会呈现这种环境。此时没有造型的须要。这样做是可以接管的;Instrument里的接口必需存在于Wind中,因为Wind是从Instrument里担任获得的。从Wind向Instrument的上溯造型大概“缩小”谁人接口,但不行能把它变得比Instrument的完整接口还要小。

    关键字:

在线提交作业