【发布时间】:2015-02-05 04:53:40
【问题描述】:
我正在按照下面的 UML 创建从引擎类调用委托方法的类,但是当我厌倦了创建 Ferrari 类的对象并将引擎类型传递给它时,即 CombustionEngine。
我收到错误CombustionEngine cannot be resolved to a variable。
据我所知,enzo 对象看不到从Engine 接口扩展而来的CombustionEngine 类。
谁能看到我在实现层次结构时哪里出了问题?
CombustionEngine 类扩展自 Engine interface:
public class CombustionEngine implements Engine {
//instance variables
private int speed;
public CombustionEngine(int speed) {
super();
this.speed = speed;
}
public CombustionEngine() {
super();
// TODO Auto-generated constructor stub
}
public void setSpeed(int speed) {
this.speed = speed;
}
@Override
public void stop() {
// TODO Auto-generated method stub
System.out.println("Combustion engine Stopped:");
}
@Override
public void start() {
// TODO Auto-generated method stub
System.out.println("Combustion engine Startedd:");
}
@Override
public void throttle(int power) {
// TODO Auto-generated method stub
speed += power;
}
@Override
public int getSpeed() {
// TODO Auto-generated method stub
return speed;
}
}
Engine 接口:
public interface Engine {
void stop();
void start();
void throttle(int power);
int getSpeed();
}
PowerVehicle类:
public class PoweredVehicle {
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();
}
}
Ferrari 类:
public class Ferrari extends PoweredVehicle {
public Ferrari(Engine engine) {
super(engine);
// TODO Auto-generated constructor stub
}
Ferrari f = new Ferrari(engine);
@Override
public void Drive() {
// TODO Auto-generated method stub
super.Drive();
System.out.println("Ferrari driving...");
}
}
最后在Runner 类中,我尝试创建Ferrari 的实例
public class Runner {
public Runner() {
// TODO Auto-generated constructor stub
}
public static void main(String[] args) {
Ferrari enzo = new Ferrari(CombustionEngine);
}
}
【问题讨论】:
标签: java oop interface uml delegation