/** * 第十三章 封装 继承 多态 */
/**
* 封装(encapsulation , 有时称为数据隐藏)
* 从形式上看,封装不过是将数据和行为组合在一个包中, 并对对象的使用者隐藏了数据的实现方式。
* 对象中的数据称为实例域( instance field ), 操纵数据的过程称为方法( method )
*
*实现封装的关键在于绝对不能让类中的方法直接地访问其他类的实例域。程序仅通过对象的方法与对象数据进行交互。
*
* 在 Java 中, 没有类就无法做任何事情, 我们前面曾经接触过几个类。然而,并不是所有的类都具有面向对象特征。
* 例如,Math 类。在程序中,可以使用 Math 类的方法, 如 Math,random, 并只需要知道方法名和参数(如果有的话,)
* 而不必了解它的具体实现过程。这正是封装的关键所在,当然所有类都是这样。但遗憾的是,Math 类只封装了功能,
* 它不需要也不必隐藏数据。由于没有数据,因此也不必担心生成对象以及初始化实例域
*
*/
/**
* 继承 “is-a” 它表明子类的每个对象也是超类的对象。
* 继承层次( inheritance hierarchy )
* 继承链 ( inheritance chain)
* 有时候,可能希望阻止人们利用某个类定义子类。不允许扩展的类被称为 final 类。final 主要目的是: 确保它们不会在子类中改变语义。
*/
/**
* 子类构造器
* 如果子类的构造器没有显式地调用超类的构造器, 则将自动地调用超类默认(没有参数 )的构造器。
* 参考:{@link # testInheritance() }
*/
/**
* 强制类型转换
* 在进行类型转换之前,先查看一下是否能够成功地转换。这个过程简单地使用instanceof 操作符就可以实现。
* 1、只能在继承层次内进行类型转换。
* 2、在将超类转换成子类之前,应该使用 instanceof进行检查。
*/
/**
* 抽象类
* 抽象方法充当着占位的角色(如对一些通用的行为进行封装), 它们的具体实现在子类中。
* 扩展抽象类的2中方法:
* 1、一种是在抽象类中定义部分抽象类方法或不定义抽象类方法,这样就必须将子类也标记为抽象类;
* 2、另一种是定义全部的抽象方法,这样一来,子类就不是抽象的了
*/
/**
* 受保护访问
* 1、仅对本类可见 private
* 2、对本包和所有子类可见 protect
* 3、对所有类可见 public
* 4、对本包可见默认(很遗憾,) 不需要修饰符
*/
/**
* 所有类的超类:Object
* 在 Java 中只有基本类型 ( primitive types )不是对象例如 , 数值 、字符和布尔类型的值都不是对象
*
*
* 一:equals()
* 1.Object 类中的 equals 方法用于检测一个对象是否等于另外一个对象.在 Object 类中 , 这方法将判断两个对象是否具有相同的引用.
* 二:hashCode()
* 1.散列码 (hashcode)是由对象导出的一个整型值。散列码是没有规律的 如果x和y是两个不同的对象,x.hashCode()与 y.hashCode()基本上不会相同
*/
复制代码