1. 类的定义与结构

1.1 类的基本概念

类(Class)是对具有相同属性和行为的一组对象的抽象描述。类是面向对象程序设计的基础,是创建对象的模板。

类的三大组成部分:

组成部分 说明 示例
类名 类的唯一标识符 StudentCar
属性(成员变量) 描述类的静态特征 nameagecolor
方法(成员函数) 描述类的动态行为 study()drive()

1.2 对象的创建

对象是类的实例。通过类可以创建多个对象,每个对象都有自己的属性值。

类名 对象名 = new 类名();

2. 封装详解

2.1 封装的概念

封装(Encapsulation)是面向对象的三大特性之一,指将数据(属性)和操作数据的方法绑定在一起,并隐藏对象的内部实现细节。

2.2 访问控制修饰符

修饰符 同类 同包 子类 所有类
public
protected
default
private

2.3 封装的实现步骤

  1. 将属性设置为私有(private)
  2. 提供公共的getter和setter方法
  3. 在方法中加入数据验证逻辑

3. 继承详解

3.1 继承的概念

继承(Inheritance)是类之间的一种关系,子类可以继承父类的属性和方法,同时可以添加新的属性和方法或重写父类的方法。

3.2 继承的特点

  • 代码复用:子类自动拥有父类的非私有成员
  • 扩展性:子类可以在父类的基础上添加新功能
  • 层次结构:形成类的层次体系

3.3 方法重写(Override)

子类重新定义父类中已有的方法,要求:

  • 方法名相同
  • 参数列表相同
  • 返回值类型相同或是其子类型
  • 访问权限不能比父类更严格

3.4 super关键字

  • 调用父类的构造方法:super(参数)
  • 调用父类的普通方法:super.方法名(参数)
  • 访问父类的属性:super.属性名

3.5 继承的注意事项

  • 子类不能继承父类的私有成员
  • 子类不能继承父类的构造方法
  • Java不支持多继承(一个类只能有一个直接父类)
  • 所有类都直接或间接继承自Object

4. 多态详解

4.1 多态的概念

多态(Polymorphism)是指同一个操作作用于不同的对象,可以产生不同的解释和执行结果。

多态的前提条件:

  1. 有继承关系或实现关系
  2. 子类重写了父类的方法
  3. 父类引用指向子类对象

4.2 方法重载(Overloading)

在同一个类中,方法名相同但参数列表不同。

重载的条件:

  • 方法名相同
  • 参数个数不同,或
  • 参数类型不同,或
  • 参数类型顺序不同

注意: 返回值类型不同不能作为重载的条件

4.3 方法重写(Overriding)

子类重新定义父类中已有的方法。

重写与重载的区别:

特性 方法重载(Overloading) 方法重写(Overriding)
位置 同一个类中 子类中
方法名 相同 相同
参数列表 不同 相同
返回值 可以不同 相同或是子类型
访问权限 可以不同 不能比父类更严格
异常 可以不同 不能比父类更宽泛

4.4 向上转型与向下转型

向上转型(Upcasting)

父类类型 变量名 = new 子类类型();
  • 自动进行
  • 安全
  • 只能调用父类中声明的方法

向下转型(Downcasting)

子类类型 变量名 = (子类类型) 父类变量;
  • 需要强制类型转换
  • 可能抛出ClassCastException
  • 建议先用instanceof进行类型检查

4.5 静态绑定与动态绑定

绑定类型 时机 特点
静态绑定(早期绑定) 编译时 调用私有方法、静态方法、final方法、构造方法
动态绑定(晚期绑定) 运行时 调用实例方法,根据实际对象类型确定调用哪个方法

5. 抽象类与接口

5.1 抽象类

特点:

  • 使用abstract关键字修饰
  • 可以包含抽象方法和非抽象方法
  • 不能实例化
  • 子类必须实现所有抽象方法(除非子类也是抽象类)

抽象方法:

  • 使用abstract关键字修饰
  • 没有方法体
  • 必须在抽象类中声明

5.2 接口

特点:

  • 使用interface关键字定义
  • 所有方法默认是公共的抽象方法(JDK 8之前)
  • 所有属性默认是公共的静态常量
  • 一个类可以实现多个接口

JDK 8+ 新特性:

  • 默认方法(default方法):有方法体,可以被重写
  • 静态方法:有方法体,不能被重写

5.3 抽象类与接口的区别

特性 抽象类 接口
关键字 abstract class interface
继承/实现 单继承 多实现
方法 可以有抽象方法和非抽象方法 JDK 8之前只能有抽象方法
属性 可以有各种类型 默认是公共静态常量
构造方法
设计目的 作为基类,代码复用 定义规范,实现多态

6. 构造方法

6.1 构造方法的特点

  • 方法名与类名相同
  • 没有返回值类型(连void都没有)
  • 在创建对象时自动调用
  • 可以重载

6.2 构造方法的执行顺序

  1. 父类的构造方法
  2. 子类的构造方法

注意: 如果子类构造方法没有显式调用父类构造方法,则默认调用父类的无参构造方法。


7. this关键字

7.1 this的用法

用法 说明
this.属性 访问当前对象的属性
this.方法() 调用当前对象的方法
this() 调用当前类的其他构造方法

7.2 this的使用场景

  • 区分成员变量和局部变量
  • 在构造方法中调用其他构造方法
  • 返回当前对象(链式调用)

8. 类之间的关系

8.1 UML类图中的关系

关系 说明 图示
关联(Association) 类之间的引用关系 实线
依赖(Dependency) 一个类使用另一个类 虚线箭头
聚合(Aggregation) 整体与部分,部分可独立存在 空心菱形
组合(Composition) 整体与部分,部分不能独立存在 实心菱形
泛化(Generalization) 继承关系 空心三角箭头
实现(Realization) 接口实现 虚线空心三角箭头

8.2 聚合与组合的区别

特性 聚合(Aggregation) 组合(Composition)
生命周期 部分和整体生命周期不一致 部分和整体生命周期一致
依赖关系 整体消失了,部分仍然存在 整体消失了,部分也消失
存在性 部分可以脱离整体存在 部分不可以脱离整体存在
示例 汽车与轮胎 人与心脏