zoukankan      html  css  js  c++  java
  • Kotlin类和对象

    来源于:菜鸟教程

    Kotlin类可以包含:构造函数和初始化代码块,函数,属性,内部类,对象声明。

    Kotlin中使用关键字class声明类,后面紧跟类名:

    class   Runoob {   //类似Java

    }

    但是Kotlin可以定义一个空类:

    class Empty
    

     类中定义成员函数:

        class Runoob()  {
                 fun foo() {    print("Foo")}   //成员函数
    }
    

     类的属性

    属性定义

    类的属性可以用关键字var声明为可变的,否则使用关键字val 声明为不可变。

    class   Runoob {

               var  name :String =  "斗酒相逢"

         var   url :String =  "www.djxf.github.io"

         val   city   : String = "株洲"

    }

    我们可以使用普通函数那样使用构造函数创建类实例:

    val   site =   Runoob()    //注意的是kotlin中没有new关键字

    要使用一个属性,只要用名称引用它即可。

    site.name  //使用.号来引用

    site.url

    Kotlin中的类中可以有一个主构造器,以及一个或多个构造器,主构造器是类头部的一部分,位于类名称之后:

    class Person construtor(firstName : String)

    {}

    如果主构造器没有任何注解,也没有任何可见度修饰符,那么constructor关键字可以省略。

    class  Person(firstName : String){}
    

     getter 和  setter

     如果属性类型可以从初始化语句或者类的成员函数中推断出来,那就可以省去类型,val不允许设置setter函数,因为它只是可读的。

    实例:

     

     Kotlin中类不能有字段。提供了Backing Fields(后端变量)机制,备用字段使用field关键字声明,field关键字只能用于属性的访问器,如以上实例。

    非空属性必须在定义的时候初始化,kotlin提供了一种可以延迟化的方案,使用lateinit关键字属性:

        lateinit var subject : TestSubject
    

     主构造器

    主构造器中不能包含任何代码,初始化代码可放在初始化代码段中,初始化代码段使用init关键字init作为前缀。

        class Person constructor(fisrtName :  String)
         {
             init {
                    println("FirstName is $firstName")
                   }  
        }            
    

     注意:主构造器的参数可以在初始化代码段中使用,也可以在类主体n定义的属性初始化代码中使用。一种简洁语法,可以通过主构造器来定义属性并初始化属性值(可以是var或val):

           class People (val firstName : String,  val lastName :  String){
                    //...
    }    
    

     如果构造器有注解,或者有可见度修饰符,这时constructor关键字是必须的,注解和修饰符要放在它之前。

    实例:

    次构造函数

    类也可以有二级构造函数,需要加前缀constructor.

    如果类有主构造函数,每个次构造函数都要,或直接或间接通过另一个次构造函数代理主构造函数。在同一个类中代理另一个构造函数使用this关键字:

    如果一个非抽象类没有声明构造函数(主或次构造函数),它会产生一个没有参数的构造函数。构造函数是public。如果你不想你的类有公共的构造函数,你就得声明一个空的主构造函数:

        class DontCreateMe  private constructor(){
    
    }
    

     注意:在JVM虚拟机中,如果主构造函数的所有参数都有默认值,编译器会生成一个附加的无参的构造函数,这个构造函数会直接使用默认值。这使得Kotlin可以使用更简单的使用像Jackson或者JPA这样使用无参构造函数来创建类实例的库。

        class Customer (val customerName : String = "")
    

      实例:

    抽象类

    抽象是面向对象的特征之一,类本身,或类中的部分成员,都可以声明abstract的。抽象成员在类中不存在具体的实现。

    注意:无需对抽象类或抽象成员标注open注解。

    嵌套类

    我们可以把类嵌套在其他类中,看一下实例:

    内部类

    内部类使用inner关键字来表示。

    内部类会有一个对外部类的对象的引用,所有内部类可以访问外部类成员属性和成员函数。

    为了消除歧义,要访问外部作用域的this,我们使用this@label,其中@label是一个代指this来源的标签。

    匿名内部类

    使用对象表达式来创建匿名内部类:

    类的修饰符

    类的修饰符包括classModifier 和 _accessModifier:

    *classModifier:类属性修饰符,标示类本身特性。

    accessModifier:访问权限修饰符

  • 相关阅读:
    K-means Algorithm
    Naive Bayes Algorithm
    Generalized Linear Models
    Support Vector Machine
    wordpress迁移
    Gaussian Discriminant Analysis
    Locally Weighted Regression
    Matlab绘图高级部分
    Supervised Learning-Regression
    html 字符串互转DOM
  • 原文地址:https://www.cnblogs.com/djxf/p/10133207.html
Copyright © 2011-2022 走看看