欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 文化 > 类与类之间的关系详解

类与类之间的关系详解

2025/6/24 10:33:16 来源:https://blog.csdn.net/weixin_51288065/article/details/147673237  浏览:    关键词:类与类之间的关系详解

Java 类与类之间的关系详解

在面向对象编程中,类与类之间的关系主要分为以下6种,每种关系都有其特定的语义和实现方式:


1. 继承(Inheritance)

定义

  • "is-a"关系:子类是父类的一种特殊形式
  • 通过 extends 关键字实现

特点

  • 子类继承父类的属性和方法
  • Java 是单继承(一个类只能继承一个父类)
  • 支持方法重写(Override)

代码示例

class Animal {void eat() { System.out.println("Eating..."); }
}class Dog extends Animal {  // Dog is-a Animalvoid bark() { System.out.println("Barking..."); }
}

UML表示

Animal
Dog

2. 实现(Implementation)

定义

  • 类与接口之间的关系
  • 通过 implements 关键字实现

特点

  • 一个类可以实现多个接口
  • 必须实现接口中所有抽象方法(Java 8+ 允许默认方法)

代码示例

interface Swimmable {void swim();
}class Fish implements Swimmable {  // Fish implements Swimmablepublic void swim() {System.out.println("Fish swimming");}
}

UML表示

Swimmable
Fish

3. 关联(Association)

定义

  • "has-a"关系:一个类知道另一个类的存在(长期关系)
  • 可以是单向或双向

类型

类型描述生命周期依赖
单向关联A→B(A知道B,B不知道A)
双向关联A↔B(互相知道)

代码示例

class Teacher {private List<Student> students;  // Teacher has Students
}class Student {private Teacher teacher;  // Student has a Teacher (双向)
}

UML表示

1
*
Teacher
Student

4. 聚合(Aggregation)

定义

  • 弱"has-a"关系:整体与部分可独立存在
  • 通过成员变量实现,通常通过构造函数或setter注入

特点

  • 部分可以属于多个整体
  • 整体销毁时部分不一定销毁

代码示例

class Department {private List<Professor> professors;  // Department has Professors
}class Professor { /*...*/ }  // Professor可以独立存在

UML表示

Department
Professor

5. 组合(Composition)

定义

  • 强"has-a"关系:部分不能脱离整体存在
  • 整体负责部分的生命周期

特点

  • 部分只能属于一个整体
  • 整体销毁时部分必须销毁

代码示例

class Car {private Engine engine;  // Car has-an Engine (组合)public Car() {this.engine = new Engine();  // Engine随Car创建/销毁}
}class Engine { /*...*/ }

UML表示

Car
Engine

6. 依赖(Dependency)

定义

  • 临时性关系:一个类的变化可能影响另一个类
  • 最弱的关系,表现为:
    • 方法参数
    • 局部变量
    • 静态方法调用

特点

  • 临时性耦合
  • 不需要长期持有对象引用

代码示例

class ReportGenerator {void generate(Data data) {  // 依赖Data类Formatter formatter = new Formatter();  // 依赖Formatter类// ...}
}

UML表示

ReportGenerator
Data
Formatter

关系对比总结

关系类型关键词生命周期UML箭头示例
继承extendsDogAnimal
实现implements虚线FishSwimmable
关联成员变量长期TeacherStudent
聚合成员变量独立◇→DepartmentProfessor
组合成员变量同生共死◆→CarEngine
依赖临时使用短暂虚线ReportData

记忆技巧

“继承实现是垂直,关联聚合组合横,
依赖关系最短暂,箭头方向要分清。”

  1. 垂直关系(类层级):

    • 继承(实线三角)
    • 实现(虚线三角)
  2. 水平关系(对象协作):

    • 关联(普通箭头)
    • 聚合(空心菱形)
    • 组合(实心菱形)
  3. 临时关系

    • 依赖(虚线箭头)

面试常见问题

  1. 聚合和组合有什么区别?

    • 聚合:部分可独立存在(如大学教师
    • 组合:部分必须随整体销毁(如汽车发动机
  2. 为什么优先使用组合而不是继承?

    • 组合更灵活(运行时可改变),避免继承的脆弱性
  3. 依赖和关联如何选择?

    • 需要长期持有用关联,临时使用用依赖

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词