📜  Kotlin-类和对象

📅  最后修改于: 2020-12-30 07:02:16             🧑  作者: Mango


在本章中,我们将学习使用Kotlin的面向对象编程(OOP)的基础知识。我们将学习类及其对象,以及如何使用该对象。根据OOP的定义,类是运行时实体的蓝图,而对象是其状态,包括其行为和状态。在Kotlin中,类声明由类头和由花括号包围的类主体组成,类似于Java。

Class myClass { // class Header 

   // class Body
}

与Java一样,Kotlin也允许创建一个类的多个对象,您可以自由地包含其类成员和函数。我们可以使用将在第10章“可见性控制”中学习的不同关键字来控制类成员变量的可见性。在下面的示例中,我们将创建一个类及其对象,通过该类我们将访问该类的不同数据成员。

class myClass {
   // property (data member)
   private var name: String = "Tutorials.point"
   
   // member function
   fun printMe() {
      print("You are at the best Learning website Named-"+name)
   }
}
fun main(args: Array) {
   val obj = myClass() // create obj object of myClass class
   obj.printMe()
}

上面的代码将在浏览器中产生以下输出,在浏览器中,我们使用其自己的对象调用myClass的printMe()。

You are at the best Learning website Named- Tutorials.point

嵌套类

根据定义,当在另一个类中创建一个类时,则将其称为嵌套类。在Kotlin中,嵌套类默认情况下是静态的,因此无需创建该类的任何对象即可对其进行访问。在下面的示例中,我们将看到Kotlin如何解释我们的嵌套类。

fun main(args: Array) {
   val demo = Outer.Nested().foo() // calling nested class method
   print(demo)
}
class Outer {
   class Nested {
      fun foo() = "Welcome to The TutorialsPoint.com"
   }
}

上面的代码将在浏览器中产生以下输出。

Welcome to The TutorialsPoint.com

内部阶层

当嵌套类标记为“内部”时,它将被称为内部类。外部类的数据成员可以访问内部类。在下面的示例中,我们将访问外部类的数据成员。

fun main(args: Array) {
   val demo = Outer().Nested().foo() // calling nested class method
   print(demo)
}
class Outer {
   private val welcomeMessage: String = "Welcome to the TutorialsPoint.com"
   inner class Nested {
      fun foo() = welcomeMessage
   }
}

上面的代码将在浏览器中产生以下输出,在编译器中,我们使用Kotlin编译器提供的默认构造函数调用嵌套类。

Welcome to the TutorialsPoint.com

匿名内部阶层

匿名内部类是一个非常好的概念,它使程序员的工作变得非常轻松。每当我们实现接口时,匿名内部块的概念就会浮现。使用运行时对象引用创建接口的对象的概念称为匿名类。在下面的示例中,我们将创建一个接口,并使用Anonymous Inner类机制创建该接口的对象。

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

上面的代码将在浏览器中产生以下输出。

I am an example of Anonymous Inner Class 

类型别名

类型别名是Kotlin编译器的属性。它提供了创建现有类型的新名称的灵活性,而不创建新类型。如果类型名称太长,则可以轻松引入一个简短的名称,并将其用于将来的用途。类型别名对于复杂类型确实很有帮助。在最新版本中,Kotlin撤消了对类型别名的支持,但是,如果您使用的是旧版本的Kotlin,则可以像下面这样使用它-

typealias NodeSet = Set
typealias FileTable = MutableMap>