Scala中Traits和抽象类的区别。

Traits

Traits与Java中的接口相似,并且使用trait关键字创建。

抽象类

抽象类类似于Java中的抽象类,并使用abstract关键字创建。

示例

以下是Scala中的程序,用于显示特性和抽象类的用法。

trait SampleTrait {
   //抽象方法
   def test

   //非抽象方法
   def tutorials() {
      println("Traits tutorials")
   }
}

abstract class SampleAbstractClass {
   //抽象方法
   def test

   //非抽象方法
   def tutorials() {
      println("Abstract Class tutorial")
   }
}

class Tester extends SampleAbstractClass {
   def test() {
      println("Welcome to Nhooo")
   }
}

class TraitTester extends SampleTrait {
   def test() {
      println("Welcome to Nhooo")
   }
}

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 Nhooo
Traits tutorials
Welcome to Nhooo

以下是Scala中Traits和Abstract Class之间的一些重要区别。

序号要点
特征抽象类
1多重继承特性支持多重继承。

抽象类仅支持单继承。

2实例

Trait可以添加到对象实例中。

无法将抽象类添加到对象实例。
3构造函数参数特性在其构造函数中不能包含参数。

抽象类可以具有参数化的构造函数。

4互通性

如果特性没有任何实现,则它们可以与Java互操作。

抽象类可以与Java互操作而没有任何限制。
5可堆叠性特性是可堆叠的,并且是动态绑定的。抽象类不是稳定的,而是静态绑定的。