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

这种表达并不仅仅是对继承的一种形象化解释,继承是直接由语言提供支持的。作为一个例子,大家可考虑一个名为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句柄的行为叫作“上溯造型”。

java 上溯_java中Instrument的上溯造型相关推荐

  1. java 事务_Java中事务总结详解(精华)

    1.什么是JAVA事务? 通常的观念认为,事务仅与数据库相关. 事务必须服从ISO/IEC所制定的ACID原则.ACID是原子性(atomicity).一致性(consistency).隔离性 (is ...

  2. [转载] c++多态与java多态性_Java中的多态性

    参考链接: Java中的加法和串联 c++多态与java多态性 Polymorphism is one of the core concepts of OOPS paradigm. The meani ...

  3. java 且_JAVA中逻辑运算符“|”和“”与“||”和“”的用法

    1.使用规则: (1)& 可以用作逻辑与的运算符,表示逻辑与(and) a.当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false ...

  4. java 包装类_Java中的包装类

    Java中哪些需要包装类 它们将原始数据类型转换为对象.如果我们希望修改传递给方法的参数,则需要对象(因为基元类型是按值传递的). java.util包中的类只处理对象,因此在这种情况下包装类也有帮助 ...

  5. java 难度_java中难度大一点的面试题

    1.请大概描述一下Vector和ArrayList的区别,Hashtable和HashMap的区别.(5) (1)Vector和ArrayList的异同 实现原理,功能相同,可以互用 主要区别: Ve ...

  6. math java 计算_Java中的数学计算函数汇总

    Math类:  java.lang.Math类中包含基本的数字操作,如指数.对数.平方根和三角函数. java.math是一个包,提供用于执行任意精度整数(BigInteger)算法和任意精度小数(B ...

  7. java中的多态性_[转载] c++多态与java多态性_Java中的多态性

    参考链接: Java中的加法和串联 c++多态与java多态性 Polymorphism is one of the core concepts of OOPS paradigm. The meani ...

  8. c++多态与java多态性_Java中的多态性

    c++多态与java多态性 Polymorphism is one of the core concepts of OOPS paradigm. The meaning of polymorphism ...

  9. java引_JAVA中的引用

    JDK1.2之后,Java扩充了引用的概念,将引用分为强引用.软引用.弱引用和虚引用四种. 强引用 类似于"Object a = new Object()"这类的引用,只要垃圾强引 ...

最新文章

  1. 基于Matlab的神经网络结合遗传算法在非线性函数极值寻优中的应用
  2. oracle和mysql存储汉字_mysql和oracle的一个汉字占几个字节
  3. 第六篇T语言实例开发,多点找色应用
  4. Java SSH 资料总结
  5. A wizard’s guide to Adversarial Autoencoders: Part 1, Autoencoder?
  6. SpringMVC-组件分析之视图解析器(prefix,suffix)
  7. CentOS 7 MySql 解压版安装配置
  8. Oracle密码过期问题 ORA-28001:the password has expired
  9. 5120v2怎么配置web登陆_阿里企业邮箱如何配置和添加到第三个电子邮件客户端中?...
  10. 前端学习(1704):前端系列javascript之问题解答2和总结
  11. c语言编程继承例子,C语言模拟实现C++的继承与多态示例
  12. 工信部回应“网传4G降速”:从未要求运营商降速
  13. Python+pandas+matplotlib控制不同曲线的属性
  14. 有多少小微餐饮创业者陷入了“就业型创业”的死亡漩涡而不自知?
  15. Python案例篇:爬取分析大型招聘网站Python岗
  16. C++基础之类的定义和对象的创捷,什么是类和对象?
  17. jQuery学习整理 (3) 使用jQuery操作元素的属性与样式
  18. 在pcb放置坐标标注_PCB拼板上的那颗美人痣
  19. 微信小程序反编译工具及方法
  20. lol大脚一直卡在读取服务器信息,英雄联盟大脚 - 英雄联盟 - LOL英雄联盟官网 - 英雄联盟攻略 - 英雄联盟专题站...

热门文章

  1. eos 编译笔记(注意点)
  2. UOJ#419. 【集训队作业2018】圆形(格林公式)
  3. 【静态页面架构】CSS之颜色与单位
  4. react native android 打包
  5. OSChina 周日乱弹 ——已经打码请放心观看
  6. 悉数11种主流NoSQL文档型数据库
  7. Linux 系统添加静态路由的方法
  8. 千万别强制停机!我嘴都气歪了!
  9. 用企业实例说明,制造业如何打破4大困境,解决数字化转型痛点
  10. 火狐、IE、Chrome已进入三国时代