美文网首页
Kotlin四:类和对象 归纳总结

Kotlin四:类和对象 归纳总结

作者: 大川的川 | 来源:发表于2020-03-30 14:39 被阅读0次
你瞅啥?

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

// 类名为 Test 
class Test {
  // 类体构成
}
// 定义一个空类
class Empty
// 在类中定义成员函数
class FunClass{
  fun test(){
       print("Foo") 
  }
}
  • 类的属性:
    1. 可以用关键字 var 声明为可变的,否则使用只读关键字 val 声明为不可变。
    2. 创建类实例 【Kotlin 中没有 new 关键字】
    3. 要使用一个属性,只要用名称引用它即可 【使用 . 号来引用】
    4. Koltin 中的类可以有一个 主构造器,以及一个或多个次构造器,主构造器是类头部的一部分,位于类名称之后 【如果主构造器没有任何注解,也没有任何可见度修饰符,那么constructor关键字可以省略】
// 1、实现属性
class FunClass{
  var name : String = "zhang"
  var age : Int = 20
  var city : String = "bj"
}
// 2、创建类实例
val site = FunClass() // Kotlin 中没有 new 关键字
// 3、使用 . 号来引用 属性
site.name
 // 4、构造器
class Person constructor(firstName: String) {}
// 没有任何注解,也没有任何可见度修饰符,那么constructor关键字可以省略
class Person (firstName: String) {}
class PersonInfo{
    var lastName :String ="zhang"
    get() = field.toUpperCase() // 将变量赋值后转换为大写
    set

    var no : Int = 100
    get() = field // 后端变量
    set(value){
        if(value<10){
            field = value
        }else{
            field = -1
        }
    }
    var heiht : Float = 145.5F
    private set
}

/**
 * 输出结果
 * ==lastName:WANG
 * ==no:9
 * ==no:-1
 */
fun main(args: Array<String>) {
    var personinfo : PersonInfo = PersonInfo()
    personinfo.lastName ="Wang"
    println("==lastName:${personinfo.lastName}")

    personinfo.no = 9
    println("==no:${personinfo.no}")

    personinfo.no = 20
    println("==no:${personinfo.no}")

}
  • 主构造器:
    1. 主构造器中不能包含任何代码,初始化代码可以放在初始化代码段中,初始化代码段使用 init 关键字作为前缀
    2. 注意:主构造器的参数可以在初始化代码段中使用,也可以在类主体n定义的属性初始化代码中使用。 一种简洁语法,可以通过主构造器来定义属性并初始化属性值(可以是var或val)
class Person constructor(firstName: String) {
    init {
        println("FirstName is $firstName")
    }
}
class PersonInfo constructor(name :String){
    var lastName :String = name
    get() = field.toUpperCase() // 将变量赋值后转换为大写
    set

    var no : Int = 100
    get() = field // 后端变量
    set(value){
        if(value<10){
            field = value
        }else{
            field = -1
        }
    }
    var heiht : Float = 145.5F
    private set

    init {
        println("==constructor lastName:${lastName}")
    }
}

/**
 * 输出结果
 * ==constructor lastName:LIU
 * ==lastName:WANG
 * ==no:9
 * ==no:-1
 */
fun main(args: Array<String>) {
    var personinfo : PersonInfo = PersonInfo("Liu")
    personinfo.lastName ="Wang"
    println("==lastName:${personinfo.lastName}")

    personinfo.no = 9
    println("==no:${personinfo.no}")

    personinfo.no = 20
    println("==no:${personinfo.no}")

}

1. 如果类有主构造函数,每个次构造函数都要,或直接或间接通过另一个次构造函数代理主构造函数。在同一个类中代理另一个构造函数使用 this 关键字
class Person(val name: String) {
constructor (name: String, age:Int) : this(name) {
// 初始化...
}
}
2. 如果一个非抽象类没有声明构造函数(主构造函数或次构造函数),它会产生一个没有参数的构造函数。构造函数是 public 。如果你不想你的类有公共的构造函数,你就得声明一个空的主构造函数
class DontCreateMe private constructor () {}

class PersonInfo constructor(name :String){
    var lastName :String = name
    get() = field.toUpperCase() // 将变量赋值后转换为大写
    set

    var no : Int = 100
    get() = field // 后端变量
    set(value){
        if(value<10){
            field = value
        }else{
            field = -1
        }
    }
    var heiht : Float = 145.5F
    private set

    init {
        println("==constructor lastName:${lastName}")
    }
    // 次构造函数
    constructor (name: String, alexa: Int) : this(name) {
        no= alexa
        println("==次构造函数 $alexa")
    }
}

/**
 * 输出结果
 * ==constructor lastName:LIU
 * ==次构造函数 30
 * ==lastName:WANG
 * ==no:-1
 * ==no:9
 * ==no:-1
 */
fun main(args: Array<String>) {
    var personinfo : PersonInfo = PersonInfo("Liu",30)
    personinfo.lastName ="Wang"
    println("==lastName:${personinfo.lastName}")

    personinfo.no = 9
    println("==no:${personinfo.no}")

    personinfo.no = 20
    println("==no:${personinfo.no}")

}
  • 抽象类:
    1. 抽象是面向对象编程的特征之一,类本身,或类中的部分成员,都可以声明为abstract的。抽象成员在类中不存在具体的实现。
    2. 非抽象的open成员函数可以在抽象类中重载。
// 输出结果:Honda is running safely..
abstract class Car{
    abstract fun run()
}
class Honda: Car(){
    override fun run(){
        println("Honda is running safely..")
    }
}
fun main(args: Array<String>){
    val obj = Honda()
    obj.run();
}

执行上面示例代码,得到以下结果 -

Honda is running safely..
open class Car {
    open fun run() {
        println("Car is running..")
    }
}
abstract class Honda : Car() {
    override abstract fun run()
}
class City: Honda(){
    override fun run() {
        //  TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
        println("Honda City is running..")
    }
}
fun main(args: Array<String>){
    val car = Car()
    car.run()
    val city = City()
    city.run()
}

执行上面示例代码,得到以下结果 -

Car is running..
Honda City is running..

相关文章

网友评论

      本文标题:Kotlin四:类和对象 归纳总结

      本文链接:https://www.haomeiwen.com/subject/xfvmuhtx.html