Scalaの特性と抽象クラスの違い。
特性
トレイトはJavaのインターフェースに似ており、traitキーワードを使用して作成されます。
抽象クラス
抽象クラスはJavaの抽象クラスに似ており、abstractキーワードを使用して作成されます。
例
以下は、特性と抽象クラスの使用法を示すScalaのプログラムです。
trait SampleTrait { // Abstract method def test // Non-Abstract method def tutorials() { println("Traits tutorials") } } abstract class SampleAbstractClass { // Abstract method def test // Non-abstract meythod def tutorials() { println("Abstract Class tutorial") } } class Tester extends SampleAbstractClass { def test() { println("Welcome to Tutorialspoint") } } class TraitTester extends SampleTrait { def test() { println("Welcome to Tutorialspoint") } } object HelloWorld { // Main method def main(args: Array[String]) { var obj = new Tester() obj.tutorials() obj.test() var obj1 = new TraitTester() obj1.tutorials() obj1.test() } }
出力
Abstract Class tutorial Welcome to Tutorialspoint Traits tutorials Welcome to Tutorialspoint
以下は、Scalaの特性と抽象クラスの重要な違いの一部です。
Sr。いいえ。 | |||
---|---|---|---|
1 | 多重継承 | Traitは多重継承をサポートしています。 | 抽象クラスは単一継承のみをサポートします。 |
2 | インスタンス | トレイトはオブジェクトインスタンスに追加できます。 | 抽象クラスをオブジェクトインスタンスに追加することはできません。 |
3 | コンストラクタパラメータ | Traitのコンストラクターにパラメーターを含めることはできません。 | 抽象クラスはパラメーター化されたコンストラクターを持つことができます。 |
4 | 相互運用性 | トレイトは、実装がない場合はJavaと相互運用できます。 | 抽象クラスは制限なしでJavaと相互運用可能です。 |
5 | スタッカビリティ | トレイトは積み重ね可能で、動的にバインドされます。 | 抽象クラスは安定化できず、静的にバインドされます。 |
-
Javaでのスレッドとランナブルの違い
新しい実行スレッドを作成するには、2つの方法があります。 1つは、クラスをThreadクラスのサブクラスとして宣言することです。このサブクラスは、Threadクラスのrunメソッドをオーバーライドする必要があります。その後、サブクラスのインスタンスを割り当てて開始できます。 スレッドを作成するもう1つの方法は、Runnableインターフェースを実装するクラスを宣言することです。次に、そのクラスはrunメソッドを実装します。次に、クラスのインスタンスを割り当て、スレッドの作成時に引数として渡して、開始することができます。 すべてのスレッドには、識別のための名前があります。複数のスレッドが同じ
-
抽象クラスとインターフェースの違い
抽象クラスは、デフォルトの動作を実装するインスタンスメソッドを持つことができます。インターフェイスは定数とインスタンスメソッドのみを宣言できますが、デフォルトの動作を実装することはできず、すべてのメソッドは暗黙的に抽象化されています。インターフェースにはすべてのパブリックメンバーがあり、実装はありません。