### 陈伟俊老师的Java基础课程知识点解析
#### 第六章 类设计
##### 继承概念及应用
**继承**是面向对象编程语言中的一个重要特性,它允许创建一个新类(子类)来继承现有类(父类)的属性和方法。通过继承,可以有效地复用代码并减少重复定义。
- **语法规则**:
- `<修饰符> class <子类名称> [extends 父类] { … }`
- 在Java中,一个类只能继承一个直接父类,这被称为**单继承**。
- 每个类都可以直接或间接地继承自`Object`类,它是所有Java类的根类。
**示例**:
- 假设有两个类`Employee`和`Manager`,其中`Manager`继承自`Employee`。这样,`Manager`不仅拥有自己的属性和方法,还能继承`Employee`的所有非私有属性和方法。
##### 访问控制
- Java提供了四种访问控制级别:
- `public`:在任何地方都能访问。
- `protected`:同一包内或者子类可以访问。
- `默认`(无修饰符):仅限于同一包内的类可以访问。
- `private`:仅限于当前类内部访问。
##### 方法的覆盖(Override)
- **覆盖**允许子类重新定义父类的方法,以适应特定的需求。
- 覆盖的规则包括:
- 子类覆盖方法的方法名、参数列表必须与父类被覆盖的方法完全一致。
- 子类覆盖方法的访问权限不能小于父类方法的访问权限。
- 覆盖只发生在子类和父类之间。
**示例**:
- `Employee`类有一个方法`getDetails()`,而`Manager`作为其子类也提供了一个同名的方法。在`Manager`中,这个方法不仅可以返回员工的基本信息,还可以附加部门信息。
##### 方法的重载(Overload)
- **重载**是指在一个类中定义多个同名方法,但这些方法具有不同的参数列表。
- 重载的规则:
- 方法名相同。
- 参数列表(类型、数量、顺序)至少有一个不同。
- 返回类型和修饰符不受限制。
- 调用哪个重载方法取决于传递的实际参数。
**示例**:
- 在`Math`类中定义了两个名为`sum`的方法,一个接受两个整数参数,另一个接受三个整数参数。根据实际传入的参数数量,调用相应的方法。
##### 方法覆盖与重载的区别
| 特性 | 方法覆盖 (Override) | 方法重载 (Overload) |
|-------------|------------------------------------|--------------------------------|
| 方法名 | 相同 | 相同 |
| 参数列表 | 相同 | 必须不同 |
| 返回类型 | 相同 | 可以不同 |
| 访问权限 | 大于等于被覆盖的方法 | 无特殊要求 |
| 定义位置 | 在子类中覆盖父类 | 可以在同一类或子类中 |
| 调用次数 | 通常只覆盖一次 | 可以重载多次 |
| 异常处理 | 不能抛出比父类更多的异常 | 无特殊要求 |
| 可变长参数 | 不适用 | 可以使用可变长参数 |
##### 可变长参数
- **可变长参数**(varargs)允许一个方法接受任意数量的参数,这些参数在方法内部被视为数组。
- 可变长参数必须是方法参数列表中的最后一个参数。
**示例**:
- `getSum`方法接受一个可变长参数`a`,该参数被视为一个整数数组。
##### this关键字
- **this**关键字用于引用当前对象的实例变量或调用当前类的其他方法。
- `this`可以用来解决变量名称冲突,以及在构造函数中调用其他构造函数。
**示例**:
- 在`Employee`类中,构造函数使用`this`来调用其他构造函数,并初始化成员变量。
##### super关键字
- **super**关键字用于引用当前对象的父类。
- 使用`super`可以在子类中访问父类的属性和方法,也可以在子类构造函数中调用父类的构造函数。
**示例**:
- 在`Manager`类的构造函数中,使用`super`调用父类`Employee`的构造函数来初始化共同的属性。
#### 总结
通过对陈伟俊老师的Java基础课程的第六章“类设计”部分的学习,我们深入了解了继承的概念及其在Java中的实现方式,同时还学习了方法覆盖与重载的区别、如何使用`this`和`super`关键字等重要知识点。这些内容对于理解和编写高效的面向对象程序至关重要。