1. 继承

继承是面向对象程序设计中最基本的概念之一,它允许我们从已有类中派生出新的类,并且新的类可以继承已有类的属性和方法。通过继承,我们可以复用已有类的代码,避免重复编写相同的代码。

例如,我们可以定义一个基类Animal,它有属性name和age,以及方法eat和sleep。然后我们可以从Animal派生出子类Dog和Cat,它们都继承了Animal的属性和方法,并且还可以定义自己的属性和方法。

下面是一个简单的类图和代码示例:

// Animal类
public class Animal {
    private String name;
    private int age;

    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void eat() {
        System.out.println(name + " is eating.");
    }

    public void sleep() {
        System.out.println(name + " is sleeping.");
    }
}

// Dog类,继承自Animal
public class Dog extends Animal {
    public Dog(String name, int age) {
        super(name, age);
    }

    public void bark() {
        System.out.println("Woof!");
    }
}

// Cat类,继承自Animal
public class Cat extends Animal {
    public Cat(String name, int age) {
        super(name, age);
    }

    public void meow() {
        System.out.println("Meow!");
    }
}

// 测试代码
public class Test {
    public static void main(String[] args) {
        Dog dog = new Dog("旺财", 3);
        Cat cat = new Cat("小花", 2);

        dog.eat();
        dog.sleep();
        dog.bark();

        cat.eat();
        cat.sleep();
        cat.meow();
    }
}
  1. 聚合

聚合是一种比继承更灵活的复用方式,它允许我们将多个对象组合成一个大对象,并且每个对象都可以独立存在。通过聚合,我们可以将复杂的问题分解成多个简单的部分,然后分别处理每个部分。

例如,我们可以定义一个班级类Class,它由多个学生对象组成。每个学生对象都有自己的姓名和年龄,以及其他属性和方法。我们可以通过聚合的方式将多个学生对象组合成一个班级对象,并且可以独立地对每个学生对象进行操作。

下面是一个简单的类图和代码示例:

// Student类
public class Student {
    private String name;
    private int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void study() {
        System.out.println(name + " is studying.");
    }
}

// Class类,由多个Student对象组成
public class Class {
    private List<Student> students;

    public Class(List<Student> students) {
        this.students = students;
    }

    public void addStudent(Student student) {
        students.add(student);
    }

    public void removeStudent(Student student) {
        students.remove(student);
    }

    public void study() {
        for (Student student : students) {
            student.study();
        }
    }
}

// 测试代码
public class Test {
    public static void main(String[] args) {
        List<Student> students = new ArrayList<>();
        students.add(new Student("张三", 18));
        students.add(new Student("李四", 19));
        students.add(new Student("王五", 20));

        Class clazz = new Class(students);
        clazz.study();
    }
}
  1. 依赖

依赖是一种更加松散的关系,它表示一个对象使用另一个对象的服务,但是两个对象之间并没有强制的联系。通过依赖,我们可以将一个对象的功能分解成多个部分,并且每个部分可以独立地进行开发和测试。

例如,我们可以定义一个邮件发送类MailSender,它依赖于一个邮件服务类MailService。MailSender类需要调用MailService类的方法来发送邮件,但是MailSender类并不关心MailService类的实现细节,只需要知道它提供了发送邮件的方法即可。

下面是一个简单的类图和代码示例:

// MailService类
public class MailService {
    public void sendMail(String to, String subject, String content) {
        // 发送邮件的实现
    }
}

// MailSender类,依赖于MailService类
public class MailSender {
    private MailService mailService;

    public MailSender(MailService mailService) {
        this.mailService = mailService;
    }

    public void send(String to, String subject, String content) {
        mailService.sendMail(to, subject, content);
    }
}

// 测试代码
public class Test {
    public static void main(String[] args) {
        MailService mailService = new MailService();
        MailSender mailSender = new MailSender(mailService);

        mailSender.send("example@example.com", "Hello", "World");
    }
}
``

原文地址: http://www.cveoy.top/t/topic/gH4u 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录