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搜索整理所得