Kotlin 类和对象

  • 面向对象

    在本章中,我们将学习使用Kotlin的面向对象编程(OOP)的基础知识。我们将学习类及其对象,以及如何使用该对象。根据OOP的定义,类是运行时实体的蓝图,而对象是其状态,包括其行为和状态。在Kotlin中,类声明由类头和由花括号包围的类主体组成,类似于Java。
    
    Class myClass { // class Header 
    
       // class Body
    }
    
    与Java一样,Kotlin也允许创建一个类的多个对象,您可以自由地包含其类成员和函数。我们可以使用将在第10章“可见性控制”中学习的不同关键字来控制类成员变量的可见性。在下面的示例中,我们将创建一个类及其对象,通过该类我们将访问该类的不同数据成员。
    
    class myClass {
       // 属性 (数据成员)
       private var name: String = "cainiaoya.com"
       
       // 成员函数
       fun printMe() {
          print("You are at the best Learning website Named-"+name)
       }
    }
    fun main(args: Array<String>) {
       val obj = myClass() // 建立一个myClass的对象
       obj.printMe()
    }
    
    尝试一下
    上面的代码将在浏览器中产生以下输出,在浏览器中,我们使用其自己的对象调用myClass的printMe()。
    
    You are at the best Learning website Named-cainiaoya.com
    
  • 嵌套类

    根据定义,当在另一个类中创建一个类时,该类称为嵌套类。在Kotlin中,嵌套类默认情况下是静态的,因此无需创建该类的任何对象即可对其进行访问。在以下示例中,我们将看到Kotlin如何解释我们的嵌套类。
    
    fun main(args: Array<String>) {
       val demo = Outer.Nested().foo() // 调用嵌套类方法
       print(demo)
    }
    class Outer {
       class Nested {
          fun foo() = "Welcome to The cainiaoya.com"
       }
    }
    
    尝试一下
    上面的代码将在浏览器中产生以下输出。
    
    Welcome to The cainiaoya.com
    
  • 内部类

    当嵌套类标记为“inner”时,它将被称为内部类。外部类的数据成员可以访问内部类。在下面的示例中,我们将访问外部类的数据成员。
    
    fun main(args: Array<String>) {
       val demo = Outer().Nested().foo() // 调用嵌套类方法
       print(demo)
    }
    class Outer {
       private val welcomeMessage: String = "Welcome to the cainiaoya.com"
       inner class Nested {
          fun foo() = welcomeMessage
       }
    }
    
    尝试一下
    上面的代码将在浏览器中产生以下输出,我们在编译时使用Kotlin编译器提供的默认构造函数调用嵌套类。
    
    Welcome to the cainiaoya.com
    
  • 匿名内部类

    匿名内部类是一个非常好的概念,它使程序员的工作变得非常轻松。每当我们实现接口时,匿名内部类的概念就会派上用场。使用运行时对象引用创建接口的对象的概念称为匿名类。在下面的示例中,我们将创建一个接口,并使用Anonymous Inner类机制创建该接口的对象。
    
    fun main(args: Array<String>) {
       var programmer:Human = object:Human {   // 创建接口的实例
          override fun think() {  // 覆盖 think 方法
             print("I am an example of Anonymous Inner Class ")
          }
       }
       programmer.think()
    }
    interface Human {
       fun think()
    }
    
    尝试一下
    上面的代码将在浏览器中产生以下输出。
    
    I am an example of Anonymous Inner Class