📜  Scala 中的抽象类

📅  最后修改于: 2022-05-13 01:55:04.222000             🧑  作者: Mango

Scala 中的抽象类

抽象是隐藏内部细节并仅显示功能的过程。在 Scala 中,抽象是通过使用抽象类来实现的。 Scala 抽象类的工作方式类似于Java抽象类。在 Scala 中,抽象类是使用abstract 关键字构造的。它包含抽象和非抽象方法,不能支持多重继承。一个类只能扩展一个抽象类。
句法:

abstract class class_name
{
// code..
}

抽象类的抽象方法是那些不包含任何实现的方法。或者换句话说,不包含主体的方法称为抽象方法。
句法:

def function_name()

例子:

// Scala program to illustrate how to 
// create an abstract class
  
// Abstract class
abstract class myauthor
{
      
    // abstract method
    def details()
}
  
// GFG class extends abstract class
class GFG extends myauthor
{
    def details()
    {
        println("Author name: Ankita Saini")
        println("Topic name: Abstract class in Scala")
    }
}
  
object Main 
{
    // Main method
    def main(args: Array[String]) 
    {
        // objects of GFG class
        var obj = new GFG()
        obj.details()
    }
}

输出:

Author name: Ankita Saini
Topic name: Abstract class in Scala

以下是关于 Scala 中抽象类的一些重要观察。

  • 像Java一样,在 Scala 中,我们不允许创建抽象类的实例。如果我们尝试创建抽象类的对象,那么编译器将给出错误,如下面的程序所示。
    例子:
    // Scala program to illustrate 
    // the concept of abstract class
      
    // Abstract class
    abstract class myauthor{
          
        // abstract method
        def details()
    }
      
      
    object Main {
          
        // Main method
        def main(args: Array[String]) {
              
            // Object of myauthor class
        var obj = new myauthor()
        }
    }
    

    输出:

  • 在 Scala 中,抽象类也可以包含字段。这些字段由抽象类方法和继承抽象类的类的方法访问。如以下程序所示。
    例子:
    // Scala program to illustrate 
    // the concept of abstract class
      
    // Abstract class with fields
    abstract class Geek
    {
        var name : String = "GeeksforGeeks"
        var tutorial: String = "Scala"
        def portal()
    }
      
    // GFG class extends abstract class
    class GFG extends Geek
    {
          
        // Abstract class method accessing
        // fields of the abstract class
        def portal()
        {
            println("Portal name: " + name)
              
        }
          
        // GFG class method accessing 
        // fields of the abstract class
        def tutdetails()
        {
            println("Tutorial name: " + tutorial) 
        }
    }
      
    object Main 
    {
          
        // Main method
        def main(args: Array[String]) 
        {
              
            // objects of GFG class
            var obj = new GFG()
            obj.portal()
            obj.tutdetails()
        }
    }
    

    输出:

    Portal name: GeeksforGeeks
    Tutorial name: Scala
  • 与Java一样,在 Scala 中,抽象类也可以包含构造函数,并且在创建继承类的实例时会调用抽象类的构造函数。如以下程序所示。
    例子:
    // Scala program to illustrate 
    // the concept of abstract class
      
    // Abstract class with constructor
    // And the constructor contain two arguments
    abstract class myauthor(name: String,
                            topic: String)
    {
        def details()
    }
      
    // GFG class extends abstract class
    class GFG(name: String, topic: String) extends
                                myauthor(name, topic)
    {
        def details()
        {
            println("Author name: " + name)
            println("Topic name: " + topic)
        }
    }
      
    object Main 
    {
          
        // Main method
        def main(args: Array[String])
        {
              
            // objects of GFG class
            var obj = new GFG("Ankita", "Abstract class")
            obj.details()
        }
    }
    

    输出:

    Author name: Ankita
    Topic name: Abstract class
    
  • 抽象类也可以只包含非抽象方法。这允许我们创建无法实例化但只能被继承的类。如以下程序所示。
    例子:
    // Scala program to illustrate 
    // the concept of abstract class
      
    // Abstract class with 
    // non-abstract method
    abstract class myauthor
    {
          
        // Non-abstract method
        def details()
        {
            println("Welcome to GeeksforGeeks")
        }
    }
      
    // GFG class extends abstract class
    class GFG extends myauthor{}
      
    object Main 
    {
          
        // Main method
        def main(args: Array[String])
        {
              
            // objects of GFG class
            var obj = new GFG()
            obj.details()
        }
    }
    

    输出:

    Welcome to GeeksforGeeks
    
  • 在 Scala 中,抽象类可以包含最终方法(不能被覆盖的方法)。例如,下面的程序编译并运行没有错误。在 Scala 中,final 方法是使用 final 关键字创建的。
    例子:
    // Scala program to illustrate 
    // the concept of abstract class
      
    // Abstract class with the final method
    abstract class myauthor
    {
        final def mymethod()
        {
            println("Final method")
        }
    }
      
    // GFG class extends abstract class
    class GFG extends myauthor{}
      
    object Main 
    {
          
        // Main method
        def main(args: Array[String]) 
        {
              
            // objects of GFG class
            var obj = new GFG()
            obj.mymethod()
        }
    }
    

    输出:

    Final method
    

何时在 Scala 中使用抽象类:
抽象类很有用:

  • 当我们想要构造一个需要构造函数参数的基类时。
  • 当我们的代码将从Java代码中调用时。

注意:特征也用于实现抽象。