📜  Scala中的内部类

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

Scala中的内部类

内部类意味着将一个类定义为另一个类。此功能使用户能够对仅在一个地方使用的类进行逻辑分组,从而增加了封装的使用,并创建了更具可读性和可维护性的代码。在 Scala 中,内部类的概念与Java不同。就像在Java中一样,内部类是外部类的成员,但在 Scala 中,内部类绑定到外部对象
句法:

class Outer_class{
class Inner_class{
// Code..
}
}

例子:

// Scala program to illustrate how to 
// create inner class
  
// Outer class
class Geek
{
      
    // Inner class
    class G1
    {
        var a = 0
        def method()
        {
            for(a<-0 to 3)
            {
                println("Welcome to inner class: G1");
            }
        }
    }
}
object Main 
{
    def main(args: Array[String]) 
    {
          
        // Creating object of the outer and
        // inner class Here, G1 class is 
        // bounded with the object of Geek class
        val obj = new Geek();
        val o = new obj.G1;
        o.method();
    }
}

输出:

Welcome to inner class: G1
Welcome to inner class: G1
Welcome to inner class: G1
Welcome to inner class: G1

说明:在上面的例子中,Geek 是外部类,G1 是内部类。现在,要创建内部类的对象,首先需要创建外部类的对象,外部类的对象是obj。现在,obj 以 G1 类为前缀,并创建 G1 类的对象 o,因为内部类绑定到外部类的对象。

如何在对象内创建类和在类内创建对象

在 Scala 中,我们还可以在对象中包含类或在类中包含对象。让我们用一个例子来讨论。在下面的示例中,首先,我们在类中创建一个对象,并在 new 关键字的帮助下访问该对象的方法,然后是类名、对象名和方法名,如下面的语句所示:

new outer_class().inner_object.method;

现在,第二,我们在对象内部创建一个类,并使用 new 关键字访问该类中存在的方法,后跟对象名称、类名称和方法名称,如下面的语句所示:

new outer_object.inner_class().method; 

例子 :

// Scala program to illustrate how to 
// create an object inside a class, Or
// a class inside an object
  
// Class inside Object
class outer_class
{
    object inner_object
    {
        val q = 0;
        def method()
        {
            for(q <- 0 to 2)
            {
                println("object inside a class example")
            }
            println()
        }
    }
}
  
// Object inside Class
object outer_object
{
    class inner_class
    {
        val s = 0;
        def method()
        {
            for(s <- 0 to 2)
            {
                println("class inside an object example")
            }
        }
    }
}
  
object Main
{
      
    // Main method
    def main(args: Array[String])
    {
          
        // Object inside a class
        new outer_class().inner_object.method;
          
        // Class inside an object
        new outer_object.inner_class().method;
    }
}

输出:

object inside a class example
object inside a class example
object inside a class example

class inside an object example
class inside an object example
class inside an object example