问题描述

假设有一个汽车制造公司,该公司生产两种类型的汽车:轿车和卡车。轿车和卡车都有一些共同的属性,如品牌、颜色和价格。此外,轿车还有一个特殊的属性:座位数,而卡车有一个特殊的属性:载重量。

我们需要设计一个Java程序来解决这个问题,该程序需要能够继承两个父类(轿车和卡车)的属性,并能够根据需要创建具体的轿车或卡车对象。

设计方案

为了解决这个问题,我们可以使用Java中的接口来实现多重继承。接口是一种只包含抽象方法和常量的类,它可以被其他类实现。我们可以创建一个名为Vehicle的接口,该接口定义了汽车的共同属性和方法。然后,我们可以创建CarTruck两个类来分别实现Vehicle接口,并添加各自特有的属性和方法。

状态图

下面是Vehicle接口的状态图:

stateDiagram
    [*] --> Vehicle

    state Vehicle {
        +getBrand()
        +getColor()
        +getPrice()
    }

关系图

下面是Vehicle接口和CarTruck类的关系图:

erDiagram
    Vehicle ||.. Car : implements
    Vehicle ||.. Truck : implements

代码实现

// 定义Vehicle接口
public interface Vehicle {
    String getBrand();
    String getColor();
    double getPrice();
}

// 实现Car类
public class Car implements Vehicle {
    private String brand;
    private String color;
    private double price;
    private int seats;

    public Car(String brand, String color, double price, int seats) {
        this.brand = brand;
        this.color = color;
        this.price = price;
        this.seats = seats;
    }

    @Override
    public String getBrand() {
        return brand;
    }

    @Override
    public String getColor() {
        return color;
    }

    @Override
    public double getPrice() {
        return price;
    }

    public int getSeats() {
        return seats;
    }
}

// 实现Truck类
public class Truck implements Vehicle {
    private String brand;
    private String color;
    private double price;
    private double loadCapacity;

    public Truck(String brand, String color, double price, double loadCapacity) {
        this.brand = brand;
        this.color = color;
        this.price = price;
        this.loadCapacity = loadCapacity;
    }

    @Override
    public String getBrand() {
        return brand;
    }

    @Override
    public String getColor() {
        return color;
    }

    @Override
    public double getPrice() {
        return price;
    }

    public double getLoadCapacity() {
        return loadCapacity;
    }
}

// 使用示例
public class Main {
    public static void main(String[] args) {
        Car car = new Car("Toyota", "Red", 20000, 4);
        System.out.println("Brand: " + car.getBrand());
        System.out.println("Color: " + car.getColor());
        System.out.println("Price: $" + car.getPrice());
        System.out.println("Seats: " + car.getSeats());

        Truck truck = new Truck("Ford", "Blue", 30000, 5000);
        System.out.println("Brand: " + truck.getBrand());
        System.out.println("Color: " + truck.getColor());
        System.out.println("Price: $" + truck.getPrice());
        System.out.println("Load Capacity: " + truck.getLoadCapacity() + " lbs");
    }
}

总结

通过使用接口实现多重继承,我们可以在Java中解决继承两个父类属性的问题。在上述方案中,我们创建了一个Vehicle接口来定义汽车的共同属性和方法,并使用CarTruck类来分别实现该接口,并添加各自特有的属性和方法。通过这样的设计,我们可以根据需要创建具体的轿车和卡车对象,并访问它们的属性和方法。