如何在另一个新的参数中使用“new”作为参数?

时间:2016-05-22 07:12:01

标签: java

下面是一个示例,它显示了合成优于继承的优点。我不明白的是Testbus类中的一段代码。

new Bus(new PrototypeEngine1()).drive();

我不熟悉上面的代码风格。如何在另一个新的参数中使用“new”作为参数?什么是这种类型的传递参数或参数调用?它有名字吗?

以下是我所遵循的完整上下文直到遇到“TestBus”类。

有一个类引擎,它有一个方法方法start()。还有另一个类Bus,它有一个方法drive()。

//dummy class or prototype class for actual engine

class PrototypeEngine1{

public boolean start(){
     // do smething
return true;
}
}

class Bus extends PrototypeEngine1 {
public void drive(){
boolean isStarted = false
boolean isStarted = super.start();

if(isStarted == true) {
// do something
}else {
    // do something
}
}
}

创建其中包含引擎引用的Buss类

class Bus {
   private Engine engine;
   public Bus ( Engine engine)
    {
      this.engine = engine;
 }

   public void drive(){

    boolean isStarted = false;
     isStarted = engine.start();
    if(isStarted == true) {
    // do something
    }else {
        // do something
    }
   }
}

class TestBus{
public void testDrive(){
   new Bus(new PrototypeEngine1()).drive();
}
}

3 个答案:

答案 0 :(得分:0)

您可以在新实例创建(构造函数调用)中创建新实例。除了可读性之外,创建新变量并传递它没有区别。

答案 1 :(得分:0)

new Bus(new PrototypeEngine1().drive());
  
      
  1. new PrototypeEngine1() - > PrototypeEngine1()的新对象已创建

  2.   
  3. new PrototypeEngine1()。drive() - >为我创建的对象调用PrototypeEngine1 Class中的方法驱动

  4.   
  5. 新总线(新PrototypeEngine1()。drive()) - >创建一个新的Busance实例。提供从2开始的构造函数使用的返回值。

  6.   

此外,您的代码无法编译,因为在PrototypeEngine1 Class中没有drive()方法

答案 2 :(得分:0)

new运算符用于创建类的实例。 new Bus(new PrototypeEngine1()).drive()中发生的事情是PrototypeEngine1的实例被创建为new Bus()的参数。

为了说明这个概念,让我们一步一步地重构单行代码:

PrototypeEngine1 engine = new PrototypeEngine1();
Bus bus = new Bus(engine);
bus.drive();

这些代码行实际上等同于原始的一行代码。