当前位置: 首页 > news >正文

Java类之间的关系

1. 继承 (Inheritance)

定义: 表示“是...的一种”关系,子类继承父类的特征和行为。

// 定义一个抽象基类Animal,用于描述所有动物共有的特征
public abstract class Animal { // 使用abstract关键字声明这是一个抽象类protected String name; // 保护级别的String类型成员变量,用于保存动物名称// 构造方法,用于初始化Animal的实例public Animal(String name) {this.name = name; // 通过this关键字访问本类实例的name属性}// 抽象方法,由于Animal是抽象的,所以它不需要实现具体的声音发出逻辑public abstract void makeSound(); // 必须有abstract修饰符,没有方法体,即无{}包围的代码块
}// Dog类继承自Animal类
public class Dog extends Animal { // 使用extends关键字表明Dog类继承自Animal类// Dog类的构造方法public Dog(String name) {super(name); // 调用super关键字,这里指的是调用父类Animal的构造方法}// 重写Animal类中的抽象方法makeSound@Override // 注解表示此方法是对父类方法的重写public void makeSound() {System.out.println("The dog named " + name + " says Woof!"); // 根据Dog的特性发出声音}
}


2. 关联 (Association)

定义: 类A拥有类B的对象作为自己的属性之一,表示“A有一个B”。

// Student类,表示学生的信息
class Student { // 普通类,非抽象也不继承任何类private String name; // 私有成员变量,表示学生的姓名public Student(String name) { // 构造方法this.name = name; // 初始化student的姓名}public String getName() { // getter方法,用于获取学生的姓名return name;}
}// School类,表示学校,可以拥有多个学生
class School { // 普通类,同样既非抽象也不继承任何类private List<Student> studentsList = new ArrayList<>(); // 创建一个学生列表的私有成员变量// 方法addStudent,向school的学生列表里添加新的学生public void addStudent(Student student) {studentsList.add(student); // 利用List的add方法,添加一个新的学生对象}
}


3. 聚合 (Aggregation)

定义: 是一种弱形式的关联,表示“A部分包含B,但即使没有B,A也能存在”。

// Department类,表示部门,可以拥有员工
class Department { // 普通类private List<Employee> employees = new ArrayList<>(); // 可能拥有多名员工public void addEmployee(Employee e) {employees.add(e); // 添加员工进部门}
}// Employee类,表示员工
class Employee { // 普通类private String name;public Employee(String name) {this.name = name;}// 其他相关方法...
}


4. 组合 (Composition)

定义: 强形式的关联,表示“A完全含有B,没有B则A无法存在”。

// Address类,表示地址信息
class Address {private String street;private String city;public Address(String street, String city) {this.street = street;this.city = city;}
}// Person类,表示人员信息,包含了Address对象
class Person {private String name;private Address homeAddress;// 注意这里homeAddress是在构造Person时就确定下来的,表示紧密关系public Person(String name, Address homeAddress) {this.name = name;this.homeAddress = homeAddress;}// 其他相关方法...
}


5. 依赖 (Dependency)

定义: 最弱的形式,仅表示“A在其生命周期某个点上使用B”。

// PaymentProcessor接口,表示支付处理器的功能
interface PaymentProcessor { // 接口,用于规范处理付款的行为void processPayment(double amount);
}// ShoppingCart类,表示购物车,依赖于某种支付手段完成购买过程
class ShoppingCart { // 普通类private List<Item> items = new ArrayList<>(); // 购物车内存放的商品列表// 计算总价double calculateTotal() {double total = 0;for (Item item : items) {total += item.getPrice();}return total;}// 结账,利用传入的paymentProcessor完成支付void checkout(PaymentProcessor paymentProcessor) {double totalAmount = calculateTotal();paymentProcessor.processPayment(totalAmount);}
}

注:从AI搜索整理所得


http://www.mrgr.cn/news/45955.html

相关文章:

  • springboot-网站开发-linux服务器部署jar格式图片存档路径问题
  • uniapp控制点击view事件,不包含子view区域
  • MATLAB中linsolve函数用法
  • 使用 YOLOv 11 模型实现实时手语检测 可同时识别多个手语手势
  • 如何开发APP?
  • 尚硅谷rabbitmq 2024 集群ui 第49节 答疑二
  • Word 中脚注和尾注的区别有哪些?如何正确使用它们?
  • 2024三掌柜赠书活动第三十二期:渗透测试理论与实践
  • 尚硅谷rabbitmq 2024 集群ui 第49节 答疑一
  • 【Linux 从基础到进阶】大数据集群的监控与管理
  • C语言贪吃蛇
  • HDLBits中文版,标准参考答案 | 3.2.5 Finite State Machines | 有限状态机(1)
  • 【Python】Twisted:让自定义网络应用开发变得简单
  • LeetCode题练习与总结:生命游戏--289
  • Authentication Lab | Client Side Auth
  • 低空经济第一步,无人机培训机构如何做大做强?
  • Vue vben admin开源库中table组件tips
  • CMake 属性之全局属性
  • 升级到Ubuntu 24.04遇到的问题
  • LabVIEW提高开发效率技巧----队列使用