間違っているように見える次のコード行を書きましたが、実際にはコンパイルされます。
class A extends {}
A はどのクラスから拡張されますか?
実際extends {}
には常に AnyRef コンストラクトに脱糖されます。これは のエイリアスですjava.lang.Object
。たとえば、構造型付けでは次のように記述できます。
def test[A <: {def some: String}](a: A) = a
ここにwith{def some: String}
のサブタイプがあります:AnyRef
some
test: [A <: AnyRef{def some: String}](a: A)A
A は java.lang.Object から拡張されます。次のコードを scala インタープリターで試すことができます。
class A extends {}
val a = classOf[A].getSuperclass
出力は次のとおりです。
a: Class[_ >: A] = class java.lang.Object