如果用得当,在由多态性、封装性和继承性共同组成的编程环境中可以写出比面向过程模型环境更健壮、扩展性更好的程序。精心设计的类层级结构是重用你花时间和努力改进并测试过的程序的基础,封装可以使你在不破坏依赖于类公共接口的代码基础上对程序进行升级迁移,多态性则有助于你编写清楚、易懂、易读、易修改的程序。
在前面两个与现实生活有关的实例中,汽车更能全面说明面向对象设计的优点,为介绍继承而用狗作类比也很有趣。总的来说,汽车与程序很相似,所有的驾驶员依靠继承性很快便能掌握驾驶不同类型(子类)车辆的技术。不管是接送学生的校车,或是默西迪斯私家轿车,或是保时捷汽车,或是家庭汽车,司机差不多都能找到方向盘、制动闸和加速器,并知道如何操作。经过一段驾驶,大多数人甚至能知道手动档与自动档之间的差别,因为他们从根本上理解这两个档的超类——传动。
人们在汽车上看见的总是封装好的特性。刹车和踏脚板隐蔽着不可思议的复杂性,但接口却是如此简单,你的脚就可以操作它们!引擎、制动闸及轮胎的大小对于你如何定义踏脚板类的接口没有任何影响。
最后的属性,多态性,在汽车制造商基于相同的交通工具所提供的多种选择的能力上得到了充分反映。例如,刹车系统有正锁和反锁之分,方向盘有带助力或不带助力之分,引擎有4缸、6缸或8缸之分。无论设置如何,你都得脚踩刹车板来停车,转动方向盘来转向,按离合器来制动。同样的接口能被用来控制许多不同的实现过程。
正如你所看到的,通过封装、继承及多态性原理,各个独立部分组成了汽车这个对象。
这在计算机程序设计中也是一样的。通过面向对象原则的使用,可以把程序的各个复杂部分组合成一个一致的、健壮的、可维护的程序整体。
正如本节开始时提到的,所有的Java程序都是面向对象的。或者,更精确地说,每个Java程序都具有封装性、继承性及多态性。尽管在本章将要介绍的简单示例程序及以后几章的示例程序中并未体现所有这些特性,但也有所体现。你将看到,Java提供的许多特性是它的内置类库的一部分,这个库使封装性、继承性及多态性得到更广泛应用。

Java新职篇:多态性、封装性与继承性相互作用是什么?相关推荐

  1. Java新职篇:面向对象编程的3个原则是什么?

    所有面向对象的编程语言都提供帮助你实现面向对象模型的机制,这些机制是封装,继承及多态性.现在让我们来看一下它们的概念. 封装 封装(Encapsulation)是将代码及其处理的数据绑定在一起的一种编 ...

  2. Java新职篇:变量的作用域和生存期

    到目前为止,我们使用的所有变量都是在方法main()的后面被声明.然而,Java允许变量在任何程序块内被声明.在第2章中已解释过了,程序块被包括在一对大括号中.一个程序块定义了一个作用域(scope) ...

  3. java如何抽象一辆车,java新职篇:面向对象之抽象

    面向对象编程的一个实质性的要素是抽象.人们通过抽象(abstraction)处理复杂性. 例如,人们不会把一辆汽车想象成由几万个互相独立的部分所组成的一套装置,而是把汽车想成一个具有自己独特行为的对象 ...

  4. Java新职篇:一维数组

    数组(array)是相同类型变量的集合,可以使用共同的名字引用它.数组可被定义为任何类型,可以是一维或多维.数组中的一个特别要素是通过下标来访问它.数组提供了一种将有联系的信息分组的便利方法. 一维数 ...

  5. Java新职篇:类型提升的约定

    除了将byte型和shorts型提升到int型以外,Java定义了若干适用于表达式的类型提升规则(type promotion rules).首先,如刚才描述的,所有的byte型和short型的值被提 ...

  6. Java新职篇:声明一个变量

    变量是Java程序的一个基本存储单元.变量由一个标识符,类型及一个可选初始值的组合定义.此外,所有的变量都有一个作用域,定义变量的可见性,生存期.接下来讨论变量的这些元素. 声明一个变量 在Java中 ...

  7. Java新职篇:使用程序块

    在Java中,可以将2个或2个以上的语句组成一组,这样的一组语句称为程序块(Codeblocks).程序块是通过将所属语句放在花括号中来实现.一旦创建了程序块,它就成为一个逻辑单元,可以作为一个单独的 ...

  8. Java新职篇:for循环

    你可能从先前的编程经验已经知道,在几乎所有的编程语言中,循环语句都是其重要组成部分.Java也不例外.事实上,你将在第5章中看到,Java提供了一套功能强大的循环结构.For循环也许是最通用的.如果你 ...

  9. Java新职篇:编译程序(2)

    要编译示例程序Example,须运行编译器程序javac,并在命令行上指定源程序文件名,格式如下所示: C:>javac Example.java 编译器javac产生了一个名为Example. ...

最新文章

  1. python socket 通信
  2. 5G NGC — 系统架构
  3. 电脑忽然卡了,键盘鼠标也失灵,问题所在,如何处理?
  4. tensor flow lstm 图像 一条直线_深入理解LSTM
  5. Codeforces Round #626 (Div. 2) D. Present 按位贡献 + 快排新姿势
  6. C++基础02-C++对c的拓展
  7. jQuery 事件的命名空间
  8. 平台允许同时在线人数 显示_《女神异闻录4G》Steam同时在线人数创新纪录
  9. ACM ICPC 历年真题和资源
  10. apkg格式怎么打开_天正软件如何导成CAD识别格式
  11. 数据库周刊53丨2020数据风云人物及“年度最佳创新产品奖“揭晓;易鲸捷与平安科技达成战略合作;腾讯云TDSQL品牌升级;SQL等价改写;MySQL数据备份;Redis万字详解……
  12. 基于SSM的应急指挥系统
  13. react里面 内联css样式怎么样_简单的使用Radium管理React中的内联样式
  14. 2021年安全生产监管人员及安全生产监管人员模拟试题
  15. NTP 时间服务器配置
  16. 蓝牙款血氧仪单片机开发
  17. 收费变免费,是商业模式的颠覆式创新
  18. mysql中清空数据表中的数据,不删除数据表
  19. Java 生成二维码(带logo 文字)
  20. [Swift]UITextField在左侧添加内边距或图标

热门文章

  1. ccf_201712-02
  2. gentoo Portage使用
  3. Apache Hadoop 源码阅读(陆续更新)
  4. 变量申明的提升,闭包,作用域,this,运算符优先级详细举例及讲解
  5. One-Pass Multi-task Convolutional Neural Networks for Efficient Brain Tumor Segmentation
  6. 命令关闭手机蓝牙_iPhone手机这些实用的便捷功能,你知道多少?
  7. java 外观模式_Java设计模式11:外观模式
  8. python映射实体类_将Python(django)实体类转换为Java的好方法 - java
  9. python程序运行键_python实现按任意键继续执行程序
  10. @param注解什么意思_Java反射是什么?看这篇绝对会了!