个性化阅读
专注于IT技术分析

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 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代码完全互操作。
性状是可堆叠的。因此, 超级调用是动态绑定的。 抽象类不可堆叠。因此, 超级调用是静态绑定的。

赞(0)
未经允许不得转载:srcmini » Scala中特质与抽象类有什么区别?

评论 抢沙发

评论前必须登录!