Kotlin 简明教程

Kotlin - Class and Objects

Kotlin同时支持函数式和面向对象编程。在讨论Kotlin的函数式特性时,我们有诸如函数、高阶函数和lambda之类的概念,它们将Kotlin表示为一种函数式语言。

Kotlin 也支持面向对象编程 (OOP) 并提供诸如抽象、封装、继承等功能。本教程将通过简单的步骤教你所有 Kotlin OOP 功能。

Kotlin Classes

类是对对象的蓝图,它定义一个模板,用于创建所需的类。

类是任何面向对象编程语言的主要构建块。使用 class 关键字定义 Kotlin 类。以下是创建 Kotlin 类的语法:

class ClassName { // Class Header

   //
   // Variables or data members
   // Member functions or Methods
   //
   ...
   ...
}

默认情况下,Kotlin 类为 public ,我们可以使用将在 Visibility Modifiers 中学习的不同修饰符控制类成员的可见性。

Kotlin Objects

对象是从 Kotlin 类创建的,它们共享由类的形式定义的公共属性和行为数据成员(属性)和成员函数(行为)。

声明类对象的语法为:

var varName = ClassName()

我们可以使用 . (点)运算符访问类的属性和方法,如下所示:

var varName = ClassName()

varName.property = <Value>
varName.functionName()

Example

下面是一个示例,我们将创建一个 Kotlin 类及其对象,通过该对象我们将访问该类不同的数据成员。

class myClass {
   // Property (data member)
   private var name: String = "Tutorialspoint.com"

   // Member function
   fun printMe() {
      print("The best Learning website - " + name)
   }
}
fun main(args: Array<String>) {
   val obj = myClass() // Create object obj of myClass class
   obj.printMe() // Call a member function using object
}

上面的代码段将在浏览器中生成以下输出,其中我们将使用自己对象 obj 调用 myClassprintMe() 方法。

The best Learning website - Tutorialspoint.com

Kotlin Nested Class

根据定义,如果在一个类中创建了另一个类,则称为 nested class

Kotlin 嵌套类默认是静态的,因此无需创建该类的任何对象就可以通过 . 点运算符访问它。同时,我们无法在嵌套类中访问外部类成员。

以下是创建嵌套类的简单语法:

class OuterClass{
   // Members of Outer Class
   class NestedClass{
      // Members of Nested Class
   }
}

现在我们可以如下创建嵌套类的对象:

val object = OuterClass.NestedClass()

Example

以下是展示 Kotlin 如何解释嵌套类的示例。

fun main(args: Array<String>) {
   val obj = Outer.Nested()

   print(obj.foo())
}
class Outer {
   class Nested {
      fun foo() = "Welcome to The TutorialsPoint.com"
   }
}

当你运行上述 Kotlin 程序时,它将生成以下输出:

Welcome to The TutorialsPoint.com

Kotlin Inner Class

当使用关键词 inner 标记嵌套类时,它将被称为 Inner class 。内部类可以通过外部类的数据成员访问。

与嵌套类不同,内部类可以访问外部类成员。我们无法直接创建内部类对象,但可以使用外部类对象创建它。

以下是创建内部类的简单语法:

class OuterClass{
   // Members of Outer Class
   class inner InnerClass{
      // Members of Inner Class
   }
}

现在我们可以如下创建内部类的对象:

val outerObj = OuterClass()
val innerObj = outerObj.InnerClass()

Example

以下是展示 Kotlin 如何解释内部类的示例。

fun main(args: Array<String>) {
   val obj = Outer().Inner()

   print(obj.foo())
}
class Outer {
   private val welcomeMessage: String = "Welcome to the TutorialsPoint.com"
   inner class Inner {
      fun foo() = welcomeMessage
   }
}

当你运行上述 Kotlin 程序时,它将生成以下输出:

Welcome to The TutorialsPoint.com

Anonymous Inner Class

匿名内部类是一个非常好的概念,可以让程序员的生活变得非常轻松。每当我们实现一个接口时,匿名内部块的概念就会出现在图片中。使用运行时对象引用创建接口对象的概念称为匿名类。

Example

以下是一个示例,展示了我们将如何创建接口,以及如何使用匿名内部类机制创建该接口的对象。

fun main(args: Array<String>) {
   var programmer :Human = object:Human { // Anonymous class
      override fun think() { // overriding the think method
         print("I am an example of Anonymous Inner Class ")
      }
   }
   programmer.think()
}
interface Human {
   fun think()
}

当你运行上述 Kotlin 程序时,它将生成以下输出:

I am an example of Anonymous Inner Class

Kotlin Type Aliases

Kotlin 类型别名是指为现有类型提供替代名称的一种方式。类型别名提供了一个更干净的方式来编写更可读的代码。

考虑以下一个返回用户信息、姓氏和年龄的函数:

fun userInfo():Triple<String, String, Int>{
   return Triple("Zara","Ali",21)
}

现在,我们可以按照 Triple 给定的类型别名如下:

typealias User = Triple<String, String, Int>

最后,上面的函数可以写成如下所示,它看起来比上面的代码更简洁:

fun userInfo():User{
   return Triple("Zara","Ali",21)
}

Example

以下是展示 Kotlin 中类型别名的用法的一个完整示例代码:

typealias User = Triple<String, String, Int>

fun main() {
    val obj = userInfo()

    print(obj)
}

fun userInfo():User{
   return Triple("Zara","Ali",21)
}

当你运行上述 Kotlin 程序时,它将生成以下输出:

(Zara, Ali, 21)