问题描述
假设有一个汽车制造公司,该公司生产两种类型的汽车:轿车和卡车。轿车和卡车都有一些共同的属性,如品牌、颜色和价格。此外,轿车还有一个特殊的属性:座位数,而卡车有一个特殊的属性:载重量。
我们需要设计一个Java程序来解决这个问题,该程序需要能够继承两个父类(轿车和卡车)的属性,并能够根据需要创建具体的轿车或卡车对象。
设计方案
为了解决这个问题,我们可以使用Java中的接口来实现多重继承。接口是一种只包含抽象方法和常量的类,它可以被其他类实现。我们可以创建一个名为Vehicle
的接口,该接口定义了汽车的共同属性和方法。然后,我们可以创建Car
和Truck
两个类来分别实现Vehicle
接口,并添加各自特有的属性和方法。
状态图
下面是Vehicle
接口的状态图:
stateDiagram
[*] --> Vehicle
state Vehicle {
+getBrand()
+getColor()
+getPrice()
}
关系图
下面是Vehicle
接口和Car
、Truck
类的关系图:
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
接口来定义汽车的共同属性和方法,并使用Car
和Truck
类来分别实现该接口,并添加各自特有的属性和方法。通过这样的设计,我们可以根据需要创建具体的轿车和卡车对象,并访问它们的属性和方法。