Java 如何创建从另一个类调用委托方法的对象?

Java 如何创建从另一个类调用委托方法的对象?,java,oop,object,delegation,Java,Oop,Object,Delegation,我试图按照下面的UML编写一个类来演示层次结构,但是当我试图创建一个M1AbramsTank时,构造函数不接受引擎类型的SteamEngine 要求是,装甲消防车的建造师应接受一个参数 PoweredVehicle的实例,我已经添加了该实例,但无法指定发动机的类型 错误是未定义油箱(蒸汽发动机) 原因是M1Abrams坦克的构造函数采用了一种PoweredVechicle类型,但如何指定对象采用的引擎 它实现的SteamEngine类和Engine接口: public class SteamE

我试图按照下面的UML编写一个类来演示层次结构,但是当我试图创建一个M1AbramsTank时,构造函数不接受引擎类型的SteamEngine

要求是,
装甲消防车的建造师应接受一个参数
PoweredVehicle的实例
,我已经添加了该实例,但无法指定发动机的类型

错误是未定义油箱(蒸汽发动机)

原因是M1Abrams坦克的构造函数采用了一种PoweredVechicle类型,但如何指定对象采用的引擎

它实现的
SteamEngine
类和
Engine
接口:

public class SteamEngine implements Engine {


    //instance variables
    private int speed;



    public SteamEngine(int speed) {

        this.speed = speed;
    }


    public void setSpeed(int speed) {
        this.speed = speed;
    }

    @Override
    public void stop() {
        // TODO Auto-generated method stub
        System.out.println("Steam engine Started:"); 


    }

    @Override
    public void start() {
        // TODO Auto-generated method stub
        System.out.println("Steam engine Started:"); 


    }

    @Override
    public void throttle(int power) {
        // TODO Auto-generated method stub
        speed += power;


    }

    @Override
    public int getSpeed() {
        // TODO Auto-generated method stub
        return speed;
    }

}
PoweredVechicle
类:

public class M1AbramsTank extends ArmouredFightingVehicle{



    public M1AbramsTank(PoweredVehicle poweredvechicle) {
        super(poweredvechicle);
        // TODO Auto-generated constructor stub
    }


    @Override
    public void Fight() {
        // TODO Auto-generated method stub
        System.out.println("M1 fighting..");

    }


}
M1AbramsTank tank1 = new M1AbramsTank(new SteamEngine(100));
公共级机动车辆{

Engine engine;

public PoweredVehicle(Engine engine) {
    super();
    this.engine = engine;
}

public Engine getEngine() {
    return engine;
}


public void  Drive(){


    System.out.println("Generic Driving");

}

public void setEngine(Engine engine) {
    this.engine = engine;
}

public void stop() {
    engine.stop();
}

public void start() {
    engine.start();
}

public void throttle(int power) {
    engine.throttle(power);
}

public int getSpeed() {
    return engine.getSpeed();
}
}

ArmouredTechicle
按照指定的方式获取一个
PoweredVechicle
的实例,以委托其方法:

public class ArmouredFightingVehicle  {

    PoweredVehicle poweredvechicle;

    public ArmouredFightingVehicle(PoweredVehicle poweredvechicle) {
        super();
        this.poweredvechicle = poweredvechicle;
    }



    public void Drive() {
        poweredvechicle.Drive();
        System.out.println("Armoured vehicle driving..");
    }



    public Engine getEngine() {
        return poweredvechicle.getEngine();
    }

    public void Fight() {
        System.out.println("bang bang!");
    }

    public void setEngine(Engine engine) {
        poweredvechicle.setEngine(engine);
    }

    public void stop() {
        poweredvechicle.stop();
    }

    public void start() {
        poweredvechicle.start();
    }

    public void throttle(int power) {
        poweredvechicle.throttle(power);
    }

    public int getSpeed() {
        return poweredvechicle.getSpeed();
    }

    public String toString() {
        return poweredvechicle.toString();
    }


}
M1AbramsTank
等级:

public class M1AbramsTank extends ArmouredFightingVehicle{



    public M1AbramsTank(PoweredVehicle poweredvechicle) {
        super(poweredvechicle);
        // TODO Auto-generated constructor stub
    }


    @Override
    public void Fight() {
        // TODO Auto-generated method stub
        System.out.println("M1 fighting..");

    }


}
M1AbramsTank tank1 = new M1AbramsTank(new SteamEngine(100));
我尝试在
Runner
类中创建
M1AbramsTank
对象:

public class M1AbramsTank extends ArmouredFightingVehicle{



    public M1AbramsTank(PoweredVehicle poweredvechicle) {
        super(poweredvechicle);
        // TODO Auto-generated constructor stub
    }


    @Override
    public void Fight() {
        // TODO Auto-generated method stub
        System.out.println("M1 fighting..");

    }


}
M1AbramsTank tank1 = new M1AbramsTank(new SteamEngine(100));
试试这个:

M1AbramsTank tank1 = new M1AbramsTank(new PoweredVehicle(new SteamEngine(100)));

是否有一种方法可以设置类,以便在创建车辆对象时不需要指定发动机类型?或者这是根据UML创建对象的正确方法吗?您可以做的是在PoweredVehicle中创建一个重载构造函数,即
PoweredVehicle(){super();this.engine=new SteamEngine(100);}
好的,我如何创建坦克对象的列表-您需要导入
java.util.*
然后您将能够添加任何类型的坦克,并使用高级for循环对其进行迭代