Scala中特质与抽象类有什么区别()

在Scala中,抽象类是使用abstract关键字构造的。它包含抽象方法和非抽象方法, 并且不支持多个继承。
例子:

//Scala program to illustrate how to //create an abstract class//Abstract class abstract class Abstclass {//Abstract and non-abstract method def portal def tutorial() { println( "Scala tutorial" ) }}//GFG class extends abstract class class GFG extends Abstclass { def portal() { println( "Welcome!! srcmini" ) } }object Main {//Main method def main(args : Array[String]) { //object of GFG class var obj = new GFG (); obj.tutorial() obj.portal() } }

输出如下:
Scala tutorial Welcome!! srcmini

像类医院,特征可以具有方法(抽象的和非抽象的)以及字段作为其成员。特性就像Java中的接口一样。但是它们比Java中的接口更强大, 因为在特征中我们被允许实现成员。
【Scala中特质与抽象类有什么区别()】例子:
//Scala program to illustrate how to //create traits//traits trait mytrait {//Abstract and non-abstract method def portal def tutorial() { println( "Scala tutorial" ) }}//GFG class extends trait class GFG extends mytrait { def portal() { println( "Welcome!! srcmini" ) } }object Main {//Main method def main(args : Array[String]) {//object of GFG class var obj = new GFG (); obj.tutorial() obj.portal() } }

输出如下:
Scala tutorial Welcome!! srcmini

特质 抽象类
特性支持多重继承。 抽象类不支持多重继承。
我们被允许向对象实例添加特征。 我们不允许将抽象类添加到对象实例。
特性不包含构造函数参数。 抽象类包含构造函数参数。
特性仅在不包含任何实现代码时才可以完全互操作。 抽象类可与Java代码完全互操作。
性状是可堆叠的。因此, 超级调用是动态绑定的。 抽象类不可堆叠。因此, 超级调用是静态绑定的。

    推荐阅读