假设载客量始终是一个整数,而载客量很可能是一个很大的数字,具体取决于载客量的单位。我会继续创建 Vehicle 类,如下所示:
class Vehicle {
Number capacity;
public Number getCapacity() {
return capacity;
}
public void setCapacity(Number capacity) {
this.capacity = capacity;
}
}
我使用Number 的原因是我在PassengerVehicle 类中使用Integer,在TransporatationVehicle 中使用Double,这是因为Integer 和Double 是Number 的子类型,你可以得到用演员表离开。
class TransportationVehicle extends Vehicle {
@Override
public Double getCapacity() {
//all I have to do is cast Number to Double
return (Double) capacity;
}
@Override
public void setCapacity(Number capacity) {
this.capacity = capacity;
}
}
PassengerVehicle 类如下:
class PassengerVehicle extends Vehicle {
@Override
public Integer getCapacity() {
//Cast to Integer and works because Integer is subtype of Number
return (Integer) capacity;
}
@Override
public void setCapacity(Number capacity) {
this.capacity = capacity;
}
}
然后您可以使用上面的类来创建车辆对象,如下所示:
public class Booking {
public static void main(String[] args) {
//
Vehicle transportationVehicle = new TransportationVehicle();
//assigning Double to setCapacity
transportationVehicle.setCapacity(new Double(225.12));
Vehicle passengerVehicle = new PassengerVehicle();
//assigning Integer to setCapacity
passengerVehicle.setCapacity(5);
System.out.println(transportationVehicle.getCapacity());
// output: 225.12
System.out.println(passengerVehicle.getCapacity());
// output: 5
}
}
在旁注中,如果您尝试传递 TransportationVehicle 除了 Number 或 Double 之外的任何内容,那么您将获得异常,同样如果您传递 PassengerVehicle 除了 Number 或 Integer 之外的任何内容,您将获得异常。
我知道我偏离了您的问题范围,但是,我真的想展示如何使您的方法成为泛型。这允许您决定在编码期间返回getCapacity() 的类型,这非常灵活。见下文:
class Vehicle<T> {
//generic type T
T capacity;
//generic method getCapacity
public T getCapacity() {
return capacity;
}
//generic method setCapacity
public void setCapacity(T capacity) {
this.capacity = capacity;
}
}
class TransportationVehicle<T> extends Vehicle<T> {
@Override
public T getCapacity() {
return capacity;
}
@Override
public void setCapacity(T capacity) {
this.capacity = capacity;
}
}
class PassengerVehicle<T> extends Vehicle<T> {
@Override
public T getCapacity() {
return capacity;
}
@Override
public void setCapacity(T capacity) {
this.capacity = capacity;
}
}
正如您在上面看到的通用方法,您可以按如下方式使用它们:
Vehicle<String> vehicleString = new TransportationVehicle<String>();
vehicleString.setCapacity("Seriously!"); //no problem
Vehicle<Integer> vehicleInteger = new PassengerVehicle<Integer>();
vehicleInteger.setCapacity(3); //boxing done automatically
Vehicle<Double> vehicleDouble = new PassengerVehicle<Double>();
vehicleDouble.setCapacity(2.2); //boxing done automatically
您可以在编码时决定类型,如果您提供容量为Integer 的Vehicle<String>,那么您将收到编译时错误,因此您将不被允许。
System.out.println(vehicleString.getCapacity());
//output: Seriously!
System.out.println(vehicleInteger.getCapacity());
//output: 3
System.out.println(vehicleDouble.getCapacity());
//output: 2.2