Scalaにおけるobject,classとtraitの違い
一.objectとclass
Scalaクラスとjavaクラスにはいくつかの違いがあります.Scalaがprivate変数を宣言すると、Scalaコンパイラはget,setを自動的に生成します.Scalaでは変数を初期化する必要があります.privateのデフォルトがpublicであることを宣言しないと、scalaにstaticキーワードがないのはclassにとって、すべての方法とメンバー変数はインスタンスがnewされるまでアクセスできません.クラスにクラスと同じ名前のobjectが宣言されている場合、そのobjectはクラスの「半生オブジェクト」であり、クラスのstaticをobjectオブジェクトに集中させることは理解でき、伴生オブジェクトとクラスファイルは同じソースファイルでなければならず、伴生オブジェクトで初期化された操作を行うことができる.
二.trait
Javaではinterfaceによる多重継承が可能であり、Scalaでは特徴(trait)による多重継承が可能であるが、javaとは異なり、独自の属性や実装方法体を定義することができ、独自の実装方法体がない場合はjava interfaceが等価であり、Scalaでも一般的には1つの親しか継承できないと考えられる.複数withで多重継承できます.
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")
}
}