Java 协作关系

引言

在软件开发中,不同的类之间通过协作进行交互,实现系统的功能。Java 是一种面向对象的编程语言,它提供了多种协作关系的实现方式,如继承、接口和组合等。本文将介绍 Java 中的协作关系,并通过代码示例来说明各种关系的用法和特点。

继承关系

继承是一种协作关系,它允许一个类继承另一个类的属性和方法。在 Java 中,使用关键字 extends 来建立继承关系,子类可以获得父类的非私有成员。下面是一个继承关系的示例代码:

public class Animal {
    protected String name;

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

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

public class Dog extends Animal {
    public Dog(String name) {
        super(name);
    }

    public void bark() {
        System.out.println(name + " is barking.");
    }
}

public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog("Tom");
        dog.eat();  // 输出:Tom is eating.
        dog.bark(); // 输出:Tom is barking.
    }
}

在上面的例子中,Dog 类继承了 Animal 类,可以使用 name 字段和 eat 方法。子类还可以添加自己的字段和方法,如 bark 方法。

接口关系

接口是一种约定,它定义了一组方法的签名,没有实现。类可以实现一个或多个接口,从而表明它们可以提供接口所定义的行为。在 Java 中,使用关键字 implements 来实现接口。下面是一个接口关系的示例代码:

public interface Shape {
    double getArea();
    double getPerimeter();
}

public class Circle implements Shape {
    private double radius;

    public Circle(double radius) {
        this.radius = radius;
    }

    public double getArea() {
        return Math.PI * radius * radius;
    }

    public double getPerimeter() {
        return 2 * Math.PI * radius;
    }
}

public class Rectangle implements Shape {
    private double width;
    private double height;

    public Rectangle(double width, double height) {
        this.width = width;
        this.height = height;
    }

    public double getArea() {
        return width * height;
    }

    public double getPerimeter() {
        return 2 * (width + height);
    }
}

public class Main {
    public static void main(String[] args) {
        Shape circle = new Circle(5);
        System.out.println("Circle Area: " + circle.getArea()); // 输出:Circle Area: 78.5
        System.out.println("Circle Perimeter: " + circle.getPerimeter()); // 输出:Circle Perimeter: 31.4
        
        Shape rectangle = new Rectangle(3, 4);
        System.out.println("Rectangle Area: " + rectangle.getArea()); // 输出:Rectangle Area: 12.0
        System.out.println("Rectangle Perimeter: " + rectangle.getPerimeter()); // 输出:Rectangle Perimeter: 14.0
    }
}

在上面的例子中,CircleRectangle 类都实现了 Shape 接口,实现了 getAreagetPerimeter 方法。通过接口关系,我们可以将不同的类统一对待,实现多态。

组合关系

组合是一种包含关系,一个类包含其他类的对象作为它的字段。通过组合关系,一个类可以调用其他类的方法来完成自己的功能。下面是一个组合关系的示例代码:

public class Engine {
    public void start() {
        System.out.println("Engine is starting.");
    }
}

public class Car {
    private Engine engine;

    public Car() {
        engine = new Engine();
    }

    public void start() {
        engine.start();
        System.out.println("Car is starting.");
    }
}

public class Main {
    public static void main(String[] args) {
        Car car = new Car();
        car.start(); // 输出:Engine is starting. Car is starting.
    }
}

在上面的例子中,Car 类包含一个 Engine 对象作为它的字段。通过调用 engine.start() 方法,可以实现汽车的启动。

总结

在 Java 中,