java - 从 Java 中的多个父类/父类(super class)继承属性

标签 java

我通过解决一些练习来学习,我必须使用 Java 创建一个 Android 应用程序,这个应用程序有 3 个主要类,分别是汽车、船和拖车。这 3 个类共享一些属性,例如,Car 和 Tow 都有 License Plate,Car 和 Boat 都有负载重量。现在我正在做的是创建两个抽象类,Vehicle 和 VehicleWithPlate,其中 Car 继承自 VehicleWithPlate,而 Boat 继承自 Vehicle。 VehicleWithPlate 继承自 Vehicle。

这甚至可能不是最好的方法,但现在的问题是我需要将负载重量实现到这些父类(super class)之一中,并且创建一个 VehicleWithWeight 不是最好的选择,因为如果一辆车既有重量又有板,就会有冲突。我知道在 Java 中“实现”多重继承的一种方法是使用接口(interface),而且我知道接口(interface)只是实现抽象方法,而不是属性。这样做的最佳方法是什么?到目前为止,我的解决方案是将 loadWeight 属性分别实现到 Vehicle 和 Boat 中,但这看起来并不干净。

汽车

public class Car extends VehicleWithPlate{

    private float loadWeight;

    public Car(String plate, int passengersNum, int maxPassengers, float loadWeight) {
        super(plate, passengersNum, maxPassengers);
        this.loadWeight= loadWeight;
    }

    public float getLoadWeight() {
        return loadWeight;
    }
}

public class Boat extends Vehicle{
    private float loadWeight;

    public Barco(int passengersNum, int maxPassengers, float loadWeight) {
        super(passengersNum, maxPassengers);
        this.loadWeight= loadWeight;
    }

    public float getLoadWeight() {
        return loadWeight;
    }

}

车辆

public abstract class Vehicle {
    protected int passengersNum;
    protected int maxPassengers;

    public Veiculo(int passengersNum, int maxPassengers){
        this.passengersNum= passengersNum;
        this.maxPassengers= maxPassengers;
    }
}

VehicleWithPlate

public abstract class VehicleWithPlate extends Vehicle {
    protected String plate;

    public VehicleWithPlate (String plate, int passengersNum, int maxPassengers) {
        super(passengersNum, maxPassengers);
        this.plate= plate;
    }

    public String getPlate() {
        return plate;
    }
}

也许我遗漏了什么,我知道重复一些代码并不是世界末日,但作为一名学生,我真的很想知道用专业的方法来处理这种基本的事情。

最佳答案

看看组合设计和继承设计的区别:here .听起来很像你真的在这里上了几节课。 LicensePlate 类、LoadWeight 类,以及您之前提到的所有车辆类。这两个新类都是“has-a”类型关系,而不是“is-a”类型关系(A Car has-a LicensePlate,a 有一个LoadWeight)。希望这可以帮助!

关于java - 从 Java 中的多个父类/父类(super class)继承属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56606431/

相关文章:

java - 在java中的分割 Pane 上添加jpanels

javascript - Mapbox NavigationViewOptions 和 NavigationLauncherOptions

java - Liquibase Hibernate 插件不工作

java - 非常不寻常的舍入

java - Struts 2 迭代器标签

java - 可能会减慢Java虚拟机的时间吗?

Java:使用scanner.nextLine().equals ("example"))需要重复输入

java - java中字符串的对象矩阵到矩阵字符串

java - Servlet web.xml 过滤器——未找到类异常

java - 如何阻止 View 在工作台重新启动时重新出现?