Scala中Traits和抽象类的区别。


Traits

Traits类似于Java中的接口,使用`trait`关键字创建。

抽象类

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

Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.

示例

 在线演示

以下是Scala程序,演示了Traits和抽象类的用法。

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中Traits和抽象类之间一些重要的区别。

序号关键点Trait抽象类
1多重继承Trait支持多重继承。抽象类只支持单继承。
2实例Trait可以添加到对象实例。抽象类不能添加到对象实例。
3构造函数参数Trait的构造函数不能有参数。抽象类可以有参数化构造函数。
4互操作性如果Traits没有任何实现,则可以与Java互操作。抽象类可以无限制地与Java互操作。
5堆叠性Traits是可堆叠的,并且是动态绑定的。抽象类不可堆叠,并且是静态绑定的。

更新于:2020年5月16日

1K+ 阅读量

启动您的职业生涯

完成课程获得认证

开始学习
广告