Java继承与子类的使用:深入解析
立即解锁
发布时间: 2025-08-18 00:27:48 阅读量: 4 订阅数: 19 

### Java 继承与子类的使用:深入解析
#### 1. 继承的基本概念
继承在生活中有诸多体现,如孩子继承父母的特征、行为,继承人继承遗产,公民继承权利等。在 Java 中,继承是面向对象编程的一个重要特性,它允许我们创建基于其他类的派生类。被继承的类称为父类、基类或超类,进行继承的类称为子类、派生类。
以下是关于继承需要了解的重要信息:
- 派生类自动继承基类的所有行为和属性。若要创建多个有共同特征但不完全相同的类,可先创建一个定义共同特征的基类,再创建继承这些特征的派生类。
- 派生类可通过定义自己的方法和字段为基类添加新特性,以此与基类区分。
- 派生类能改变基类提供的行为。例如,基类可能定义了一个名为 `play` 的方法,每个派生类可根据自身需求提供该方法的不同实现。
- 继承最适合用于实现 “is - a - type - of” 关系,如纸牌接龙是一种游戏,卡车是一种车辆,发票是一种交易。
#### 2. 继承的实例分析
##### 2.1 车辆类继承
考虑不同类型的车辆,如汽车和摩托车。我们可以创建一个 `Vehicle` 类来描述所有车辆的共同特征,如轮子、驾驶员、载客能力以及行驶、停车、转弯和碰撞等动作。
```mermaid
graph TD;
A[Vehicle] --> B[Motorcycle];
A --> C[Car];
```
- `Motorcycle` 类继承 `Vehicle` 类,除了具备车辆的基本特征外,还有两个轮子和用于转向控制的把手。
- `Car` 类也继承 `Vehicle` 类,它有四个轮子、方向盘、安全带和安全气囊,还可能有自动变速器。
##### 2.2 游戏类继承
以开发一系列棋盘游戏为例,如《人生游戏》《抱歉!》和《大富翁》。大多数棋盘游戏有一些共同特征:
- 有一个玩家可以占据位置的游戏棋盘。
- 玩家由对象表示。
- 游戏通过玩家轮流进行,直到有人获胜。
每个具体的游戏在这些基本特征的基础上添加自己的特性:
| 游戏名称 | 额外特性 |
| ---- | ---- |
| 《人生游戏》 | 金钱、保险政策、配偶、孩子和棋盘中间的精美转盘 |
| 《抱歉!》 | 用于决定每次移动的卡片和其他玩家无法攻击的安全区域 |
| 《大富翁》 | 机会卡和社区福利卡、房产、房屋、酒店和金钱 |
我们可以创建一个通用的 `BoardGame` 类作为基类,然后为具体的棋盘游戏创建派生类,如 `LifeGame`、`SorryGame` 和 `MonopolyGame`。
##### 2.3 员工类继承
在设计薪资系统时,员工分为 salaried employees( salaried employees)和 hourly employees(小时工)。这两类员工有很多共同之处,如姓名、地址、社保号码、年度总收入和已扣除的税额等。但也有重要区别,如 salaried employees 有年薪,hourly employees 有小时工资率,hourly employees 的工作时间表每周会变化,而 salaried employees 可能有小时工没有的福利计划。
因此,我们可以创建一个 `Employee` 类处理两类员工的共同特征,然后将其作为 `SalariedEmployee` 和 `HourlyEmployee` 类的基类。
```mermaid
graph TD;
A[Employee] --> B[SalariedEmployee];
A --> C[HourlyEmployee];
B --> D[Manager];
B --> E[SalesPerson];
```
如果 salaried employees 又分为管理和销售两类,我们可以进一步将 `SalariedEmployee` 类作为 `Manager` 和 `SalesPerson` 类的基类。
#### 3. 创建子类
创建子类的基本步骤很简单,只需在子类声明中使用 `extends` 关键字。基本格式如下:
```java
public class ClassName extends BaseClass
{
// class body goes here
}
```
例如,有一个 `Ball` 类定义基本的球,我们可以创建一个 `BouncingBall` 子类,为球添加弹跳能力:
```java
public class BouncingBall extends Ball
{
// methods and fields that add the ability to bounce
// to a basic Ball object:
public void bounce()
{
// the bounce method
}
}
```
子类会自动拥有它所继承类的所有方法和字段。但需要注意以下几点:
- 子类继承基类的所有成员,但构造函数不被视为成员,因此子类不继承基类的构造函数。
- 从基类继承的成员的可见性(公共或私有)在子类中保持不变,即子类无法直接访问基类中声明为私有的方法或字段。
- 可以通过在子类中声明具有相同签名的新成员来重写方法。
- Java 提供了 `protected` 可见性,具有该可见性的成员对子类可见,但对其他类不可见。
- 可以为子类添加更多的方法或字段,无论是私有还是受保护的。
#### 4. 委托模式
继承是 Java 等面向对象编程语言的重要特性,但并非适用于所有编程问题。在很多情况下,将一个类的实例包含在另一个类中比使用继承更简单,这种技术有时被称为委托模式。
例如,要创建一个 `EmployeeCollection` 类来表示一组员工,一种方法是扩展 Java API 提供的集合类,如 `ArrayList` 类。但更简单的方法是在
0
0
复制全文
相关推荐










