spark scalaにおけるobject,class,traitの違い

1652 ワード

一、object
1.Scalaがprivate変数を宣言すると、Scalaコンパイラはget,setを自動的に生成します.Scalaでは変数を初期化する必要があります.privateを宣言しないとデフォルトはpublicです.
2.scalaにはstaticキーワードがない、scalaには静的メソッドと静的フィールドがないので、scalaではobjectでこれらの機能を実現することができ、オブジェクト名で直接呼び出す方法は、Arrayのような実現方式を採用する.toString.
3.classの場合、すべてのメソッドとメンバー変数は、インスタンスがnewされるまでアクセスできません.
4.クラスにクラスと同じ名前のobjectが宣言されている場合、そのobjectはそのクラスの「伴生オブジェクト」であり、クラスのstaticをobjectオブジェクトに集中させたことが理解でき、伴生オブジェクトとクラスファイルは同じソースファイルでなければならず、伴生オブジェクトで初期化の操作を行うことができる.
5.オブジェクトのコンストラクタは、最初の使用時に呼び出され、オブジェクトが使用されていない場合、そのコンストラクタも実行されません.オブジェクトは本質的にクラス(scala)のすべての特性を有し、それ以外にobjectはクラスと1つ以上の特質を拡張することができる:例えば、
abstract class ClassName(val parameter){}
object Test extends ClassName(val parameter){}

注意:objectはコンストラクタパラメータを提供できません.つまり、objectはパラメータなしでなければなりません.
二、class
1.scalaでは、クラス名とオブジェクト名を同じ名前にすることができます.このオブジェクトはクラスの伴生オブジェクトと呼ばれ、クラスと伴生オブジェクトは互いにプライベート属性にアクセスできますが、同じソースファイル内にある必要があります.
2.クラスはコンパイルされるだけで、直接実行することはできません.クラスの申明はメインコンストラクタと一緒に申明されます.1つのクラスでは、メインコンストラクタは内部でメインコンストラクタまたは他の申明メインコンストラクタを申明しなければならないすべてのサブコンストラクタしかありません.メインコンストラクタはクラス定義のすべての文を実行します.
3.scalaはフィールドごとにgetterメソッドとsetterメソッドを提供し、表示することもできますが、valタイプに対してはgetterメソッドのみを提供します.
4.デフォルトでは、フィールドは共通のタイプであり、setterメソッドに制限条件を追加して変数の変化範囲を制限できます.scalaメソッドでは、すべてのオブジェクトを変更するプライベートフィールドにアクセスできます.
三、trait
1.javaではインターフェースによる多重継承が可能であり、Scalaではフィーチャー(trait)による多重継承が可能である
2.ただしjavaとは異なり、独自の属性と実装メソッドを定義することができ、独自の実装メソッドがない場合にjava interfaceが等価であると考えられる
3.Scalaでも通常は1つの親しか継承できず、複数のwithで多重継承できる.
trait TraitA{}
trait TraitB{}
trait TraitC{}
object Test1 extends TraitA with TraitB with TraitC{}