Scalaのクラスとオブジェクト

あまりJavaとの違いが大きくないので、気になったところだけ。
  • overrideする場合は、defの前に「override」をつける。C#みたい。
  • メソッド呼び出しに「( )」は不要。属性/操作への透過的なアクセスは、OOSCで述べられているOO言語の要件に合致する。
  • Javaのインタフェースに相当するものはない。同じ事がやりたければ、abstract classかtraitを使う。
  • abstract classはほぼJavaと同じで、Objectを作ることもできない。
  • traitはMix-in用の構成物。
  • 抽象クラスを継承し、メソッド定義に実装を与える場合にはoverrideは必要ない。
  • 組み込みSingletonサポートとして、objectが存在する。classのかわりにobjectで定義されたものは、Singletonとなる。
  • objectは、newでインスタンス化できず、コンストラクタも存在しない。最初にメンバーにアクセスされた時に自動的にインスタンス化される。
  • Scalaではprimitive型もオブジェクトだが、内部的にはJavaのAuto-Boxingを使って処理されている。つまり、必要に応じてprimitive型も使われている。

コメント