下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

java中Instrument的上溯造型

作者:课课家教育     来源: http://www.kokojia.com点击数:1081发布时间: 2016-02-16 20:15:03

标签: java编程java基础类java开发

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

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

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句柄的行为叫作“上溯造型”。

赞(16)
踩(2)
分享到:
华为认证网络工程师 HCIE直播课视频教程