从Java中的多个父/超类继承属性
我通过解决一些练习来学习,我必须使用Java创建一个Android应用程序,这个应用程序有三个主要类,分别是汽车、船和拖车。这三个类别共享一些属性,例如,汽车和拖车都有牌照,汽车和船都有载重。现在我要做的是创建两个抽象类,Vehicle和VehicleWithPlate,其中Car继承自VehicleWithPlate,Boat继承自Vehicle。VehicleWithPlate继承自Vehicle
这甚至可能不是最好的方法,但现在的问题是,我需要在其中一个超类中实现负载重量,并创建一个重量不是最佳选择的车辆,因为如果一辆车辆既有重量,又有一个板,就会发生冲突。我知道在Java中“实现”多重继承的一种方法是使用接口,我知道接口只实现抽象方法,而不是属性。最好的方法是什么?到目前为止,我的解决方案是将loadWeight属性单独应用到车辆和船只中,但这看起来并不干净
汽车
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;
}
}
带牌照的车辆
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;
}
}
也许我遗漏了一些东西,我知道重复一些代码并不是世界末日,但作为一名学生,我真的很好奇如何用专业的方法来处理这些基本的问题
# 1 楼答案
看看按组合设计和按继承设计之间的区别:here。听起来你在这里真的有几门课。一个
LicensePlate
类,一个LoadWeight
类,以及您之前提到的所有车辆类。这两个新类都是“has-a”类型关系,而不是“is-a”类型关系(aCar
has-aLicensePlate
,aBoat
has-aLoadWeight
)。希望这有帮助# 2 楼答案
或者,您可以将权重属性提取到接口:
这样,您可以在需要时向上转换为“加权”,但仍然需要单独实现该属性