算法(4th ed)(101):基础——数据抽象 4.5.5

阅读数:13 2019 年 11 月 2 日 12:20

算法(4th ed)(101):基础——数据抽象 4.5.5

(数据类型的设计:实现继承)

Java 还支持另一种继承机制,被称为子类。这种非常强大的技术使程序员不需要重写整个类就能改变它的行为或者为它添加新的功能。它的主要思想是定义一个新类(子类,或称为派生类)来继承另一个类(父类,或称为基类)的所有实例方法和实例变量。子类包含的方法比父类更多。另外,子类可以重新定义或者重写父类的方法。子类继承被系统程序员广泛用于编写所谓可扩展的库——任何一个程序员(包括你)都能为另一个程序员(或者也许是一个系统程序员团队)创建的库添加方法。这种方法能够有效地重用潜在的十分庞大的库中的代码。例如,这种方法被广泛用于图形用户界面的开发,因此实现用户所需要的各种控件(下拉菜单,剪切—粘贴,文件访问等)的大量代码都能够被重用。子类继承的使用在系统程序员和应用程序员之间是有争议的(它和接口继承之间的优劣还没有定论)。在本书中我们会避免使用它,因为它会破坏封装。但这种机制是 Java 的一部分,因此它的残余是无法避免的:具体来说,每个类都是 Java 的 Object 类的子类。这种结构意味着每个类都含有 getClass()toString()equals()hashCode()(见表 1.2.17)和另外几个我们不会在本书中用到的方法的实现。实际上,每个类都通过子类继承Object 类中继承了这些方法,因此任何用例都可以在任意对象中调用这些方法。我们通常会重载新类的toString()equals()hashCode() 方法,因为 Object 类的默认实现一般无法提供所需的行为。接下来我们将讨论 toString()equals(),在 3.4 节中讨论 hashCode()

表 1.2.17 本书中所使用的由 Object 类继承得到的方法

方法 作用 章节
  Class  getClass() 该对象的类是什么 1.2
 String  toString() 该对象的字符串表示 1.1
boolean  equals(Object that) 该对象是否和 that 相等 1.2
    int  hashCode() 该对象的散列值 3.4

评论

发布