Java面向对象继承与重写详解

需积分: 5 0 下载量 79 浏览量 更新于2024-08-03 收藏 255KB PDF 举报
面向对象编程中的继承以及Java中的Object类 在Java编程语言中,面向对象的特性之一就是继承,它允许一个类(子类)继承另一个类(父类)的属性和方法,从而实现代码的复用和扩展。关键字`extends`用于表示继承关系,如`子类 extends 父类`。这表示子类将拥有父类的所有非私有成员变量和方法,但不能直接访问父类的私有成员。 一个类可以有多个子类,而一个类只能有一个直接父类,这就是Java的单继承特性。这种设计有助于避免复杂的继承关系,同时提供了多层继承的可能,即一个类可以作为另一个类的父类,而这个类本身可能也继承自另一个类。 继承的主要目的是降低代码冗余,提高代码的重用性和程序的可扩展性。当需要创建功能相似但又有所区别的新类时,可以通过继承已有类并在此基础上进行修改或添加新的功能,而不是从零开始编写所有代码。 重写(Override)是在继承中一个重要的概念。当子类中有与父类同名、同参数列表且权限不小于父类的方法时,我们说子类重写了父类的方法。重写要求子类的方法返回值、方法名和参数列表必须与父类完全相同,且子类方法的访问权限不能低于父类。子类重写后的方法体可以有自己的实现,通常是为了在子类中提供特定的行为。 与重写不同,重载(Overload)是指在一个类中,可以有多个方法具有相同的名称,但它们的参数列表不同(可以是参数的个数、类型或顺序不同)。系统会根据传入的实际参数来决定调用哪个重载方法,返回值类型并不影响方法的重载。 在给定的代码示例中,`Father`类是父类,包含一些成员变量和方法。`Son`类继承自`Father`,并重写了`earnMoney()`方法,同时也定义了新的方法`getAge()`和`setAge()`。`Son`类中的`run(int num)`并不是对`Father`类中`run()`方法的重写,因为它们的参数列表不同,这是一个重载的例子。 在实际编程中,`Object`类是所有Java类的根类,每个类都隐式地或显式地继承自`Object`。`Object`类中定义了一些基本的方法,如`toString()`、`hashCode()`和`equals()`等,这些方法在处理对象时非常常见。例如,`toString()`方法返回对象的字符串表示,`hashCode()`用于哈希表操作,而`equals()`则用于比较两个对象是否相等。 在继承`Object`类时,如果需要自定义这些方法的行为,可以重写它们。例如,如果希望创建一个类,其对象在比较时基于特定属性而不是默认的引用比较,那么就需要重写`equals()`方法。这样,当使用`==`运算符或`equals()`方法比较两个对象时,可以根据自定义规则判断它们是否相等。 面向对象的继承和重写是Java中关键的编程概念,它们帮助构建复杂且可维护的软件结构。理解并熟练运用这些概念对于开发高效、可扩展的Java应用程序至关重要。