java中Instrument的上溯造型

    作者:课课家教育更新于: 2016-02-16 20:15:03

    大神带你学编程,欢迎选课

      继承最值得注意的地方就是它没有为新类提供方法。继承是对新类和基础类之间的关系的一种表达。可这样总结该关系:“新类属于现有类的一种类型”。

    java中Instrument的上溯造型_java编程_java基础类_课课家

      这种表达并不仅仅是对继承的一种形象化解释,继承是直接由语言提供支持的。作为一个例子,大家可考虑一个名为Instrument的基础类,它用于表示乐器;另一个衍生类叫作Wind。由于继承意味着基础类的所有方法亦可在衍生出来的类中使用,所以我们发给基础类的任何消息亦可发给衍生类。若Instrument类有一个play()方法,则Wind设备也会有这个方法。这意味着我们能肯定地认为一个Wind对象也是Instrument的一种类型。下面这个例子揭示出编译器如何提供对这一概念的支持:

      //: Wind.java

      // Inheritance & upcasting

      import java.util.*;

      class Instrument {

      public void play() {}

      static void tune(Instrument i) {

      // ...

      i.play();

      }

      }

      // Wind objects are instruments

      // because they have the same interface:

      class Wind extends Instrument {

      public static void main(String[] args) {

      Wind flute = new Wind();

      Instrument.tune(flute); // Upcasting

      }

      } ///:~

      这个例子中最有趣的无疑是tune()方法,它能接受一个Instrument句柄。但在Wind.main()中,tune()方法是通过为其赋予一个Wind句柄来调用的。由于Java对类型检查特别严格,所以大家可能会感到很奇怪,为什么接收一种类型的方法也能接收另一种类型呢?但是,我们一定要认识到一个Wind对象也是一个Instrument对象。而且对于不在Wind中的一个Instrument(乐器),没有方法可以由tune()调用。在tune()中,代码适用于Instrument以及从Instrument衍生出来的任何东西。在这里,我们将从一个Wind句柄转换成一个Instrument句柄的行为叫作“上溯造型”。

课课家教育

未登录