Scalaにおけるobject,classとtraitの違い


一.objectとclass
Scalaクラスとjavaクラスにはいくつかの違いがあります.Scalaがprivate変数を宣言すると、Scalaコンパイラはget,setを自動的に生成します.Scalaでは変数を初期化する必要があります.privateのデフォルトがpublicであることを宣言しないと、scalaにstaticキーワードがないのはclassにとって、すべての方法とメンバー変数はインスタンスがnewされるまでアクセスできません.クラスにクラスと同じ名前のobjectが宣言されている場合、そのobjectはクラスの「半生オブジェクト」であり、クラスのstaticをobjectオブジェクトに集中させることは理解でき、伴生オブジェクトとクラスファイルは同じソースファイルでなければならず、伴生オブジェクトで初期化された操作を行うことができる.
class Person {
  def main(args: Array[String]): Unit = {
    print("class print")
  }
}
//    
object Person{
  def main(args: Array[String]): Unit = {
    print("object print")
  }
}

二.trait
Javaではinterfaceによる多重継承が可能であり、Scalaでは特徴(trait)による多重継承が可能であるが、javaとは異なり、独自の属性や実装方法体を定義することができ、独自の実装方法体がない場合はjava interfaceが等価であり、Scalaでも一般的には1つの親しか継承できないと考えられる.複数withで多重継承できます.
class Person extends TraitA with TraitB with TraitC {
  def main(args: Array[String]): Unit = {
    print("class print")
  }
}
//    
object Person extends TraitA with TraitB with TraitC{
  def main(args: Array[String]): Unit = {
    print("object print")
  }
}