更改Java对象类型?

时间:2013-12-24 18:50:01

标签: java

在我的程序运行期间,我想确定我需要实例化的对象的类型。

作为一个例子:如果用户从A到B旅行,他可以选择一种运输方式:汽车或自行车,两者都可以让用户旅行,但实际的工作流程是不同的。在汽车中,你需要换档才能在自行车上移动,你需要划桨。他们会有一套共同的方法,即:“移动”,但它们的实现会有所不同。

该计划的其余部分不需要知道如何实施“移动”......

想象:

public class Transport {
   public Object transportMethod;

   public Transport(tMet) {
      if (tMet.equals("car")) {
         transportMethod = new Car();
      }
      else if (tMet.equals("bike")) {
         transportMethod = new Bike();
      }
   }

   public Object returnTransportMethod() {
      return transportMethod();
   }
}

当我将transportMethod传递回另一个类时,我现在如何使用Bike或Car方法?

谢谢!

克里斯

1 个答案:

答案 0 :(得分:9)

  

他们会有一套共同的方法,即:“移动”,但它们的实现会有所不同。

听起来他们应该实现相同的接口或扩展相同的抽象超类。在Object类中使用该接口或超类而不是Transport。实际上,听起来你的Transport课程本身就是一个工厂而不是交通工具。但把它放在一边:

public interface Vehicle {
    void move();
}

public class Bike implements Vehicle {
    public void move() {
        // Implementation
    }
}

public class Car implements Vehicle {
    public void move() {
        // Implementation
    }
}

public class VehicleFactory {
   public Vehicle vehicle;

   public VehicleFactory(String method) {
      if (method.equals("car")) {
         vehicle = new Car();
      } else if (method.equals("bike")) {
         vehicle = new Bike();
      }
      // TODO: Decide what you want to do otherwise...
   }

   public Vehicle getVehicle() {
      return vehicle;
   }
}