下面是一个示例,它显示了合成优于继承的优点。我不明白的是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();
}
}
答案 0 :(得分:0)
您可以在新实例创建(构造函数调用)中创建新实例。除了可读性之外,创建新变量并传递它没有区别。
答案 1 :(得分:0)
new Bus(new PrototypeEngine1().drive());
new PrototypeEngine1() - > PrototypeEngine1()的新对象已创建
new PrototypeEngine1()。drive() - >为我创建的对象调用PrototypeEngine1 Class中的方法驱动
- 醇>
新总线(新PrototypeEngine1()。drive()) - >创建一个新的Busance实例。提供从2开始的构造函数使用的返回值。
此外,您的代码无法编译,因为在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();
这些代码行实际上等同于原始的一行代码。