扩展类的新实例

时间:2014-05-29 19:47:02

标签: scala

您好我正在尝试了解Scala的以下代码。你有B类和A,它依赖于B类。最后C类扩展A.当扩展A类时,下面的代码是新的B.这样做有什么重要意义?在Java中你不能这样做。

  class B {}
  class A( b:B ) {}
  class C extends A( new B) {}

2 个答案:

答案 0 :(得分:2)

class C extends A(new B) {}

表示C具有无参数的主构造函数,并且在构造时,它使用新的B实例调用基类构造函数。它相当于:

public class C extends A
{
    public C() {
        super(new B());
    }
}

答案 1 :(得分:2)

什么是B

class B {}

这只是一个空课。在Java中,你会写相同的。

什么是A

class A(b: B) {}

这是一个有一个字段的类。该类的构造函数采用一个参数。构造函数将字段设置为参数。在Java中,您可以按如下方式编写:

class A {
  B b
  A(B b) {
    this.b = b
  }
}

什么是C

class C extends A(new B) {}

这是A的子类,将字段b设置为new B。在Java中,您可以按如下方式编写:

class C extends A {
  C() {
    super(new B())
  }
}