Java 如何编写返回抽象类实例的方法?
我是Java初学者,我试图理解抽象类。 下面是我写的代码;问题是:如何编写返回该类实例的方法Java 如何编写返回抽象类实例的方法?,java,Java,我是Java初学者,我试图理解抽象类。 下面是我写的代码;问题是:如何编写返回该类实例的方法 public abstract class VehicleEngine { protected String name; protected double fabricationCons; protected double consum; protected int mileage; public VehicleEngine(String n, double f
public abstract class VehicleEngine
{
protected String name;
protected double fabricationCons;
protected double consum;
protected int mileage;
public VehicleEngine(String n, double fC)
{
name = n;
fabricationCons = fC;
mileage = 0;
consum = 0;
}
private void setFabricationCons(double fC)
{
fabricationCons = fC;
}
public abstract double currentConsum();
public String toString()
{
return name + " : " + fabricationCons + " : " + currentConsum();
}
public void addMileage(int km)
{
mileage += km;
}
public double getFabricationConsum()
{
return fabricationCons;
}
public String getName()
{
return name;
}
public int getMileage()
{
return mileage;
}
//public VehicleEngine get(String name){
//if(getName().equals(name)){
//return VehicleEngine;
//}
//return null;
//}
}
public class BenzinVehicle extends VehicleEngine
{
public BenzinVehicle(String n, double fC)
{
super(n, fC);
}
@Override
public double currentConsum()
{
if (getMileage() >= 75000) {
consum = getFabricationConsum() + 0.4;
} else {
consum = getFabricationConsum();
}
return consum;
}
}
public class DieselVehicle extends VehicleEngine
{
public DieselVehicle(String n, double fC)
{
super(n, fC);
}
@Override
public double currentConsum()
{
int cons = 0;
if (getMileage() < 5000) {
consum = getFabricationConsum();
} else {
consum = getFabricationConsum() + (getFabricationConsum() * (0.01 * (getMileage() / 5000)));
}
return consum;
}
}
输出应为:
Ford Focus 1.9 : 5.0 : 5.4
Toyota Yaris 1.4D : 4.0 : 4.36
Citroen C3 1.6 : 5.2 : 5.2
null
看一下图案。您的具体类将实现一个返回类实例的抽象方法。看看该模式。您的具体类将实现一个返回类实例的抽象方法。根据定义,您不能返回抽象类的实例。您可以做的是返回扩展它的一个具体的非抽象子类的实例。例如,在VehicleEngine内部,您可以创建一个工厂,返回给定实例类型和预期参数的实例,但这些实例必须是VehicleEngine的具体子类。根据定义,您不能返回抽象类的实例。您可以做的是返回扩展它的一个具体的非抽象子类的实例。例如,在VehicleEngine内部,您可以创建一个工厂,返回给定实例类型和预期参数的实例,但这些实例必须是VehicleEngine的具体子类。抽象类不保留其实例列表。实际上,没有Java类能做到这一点。如果您真的想这样做,可以向VehicleEngine添加静态地图,如下所示:
private static Map<String, VehicleEngine> instanceMap = new HashMap<String, VehicleEngine>();
public static VehicleEngine get(String name) {
return instanceMap.get(name);
}
并将此行添加到VehicleEngine构造函数的末尾:
VehicleEngine.instanceMap.put(n, this);
这样,创建的每个新实例都将自己放入静态映射中。然而,这实际上并不是实现这种功能的好方法。你可以尝试使用一个工厂来创建实例,或者你可以考虑将这个类转换成枚举,如果你有有限的预定义的实例数。实际上,没有Java类能做到这一点。如果您真的想这样做,可以向VehicleEngine添加静态地图,如下所示:
private static Map<String, VehicleEngine> instanceMap = new HashMap<String, VehicleEngine>();
public static VehicleEngine get(String name) {
return instanceMap.get(name);
}
并将此行添加到VehicleEngine构造函数的末尾:
VehicleEngine.instanceMap.put(n, this);
这样,创建的每个新实例都将自己放入静态映射中。然而,这实际上并不是实现这种功能的好方法。您可以尝试使用工厂来创建实例,或者您可以考虑将这个类转换为枚举,如果您将有有限的预定义数量的实例。