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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值