kotlin基本语法<四> [对象、数据类、枚举类、重载运算符、接口和抽象类]

关键字object 三种方式:声明对象、对象表达式、伴生对象

声明对象

对象可以用于整理代码 管理变量与状态

// 定义类
class Person(_name:String){
    var name = _name
        get() = field
}

// 声明对象
object Game{
    // 变量
    var person = Person("bbb")

    // 初始化
    init {
        println(" create game ")
    }

    // 定义对象方法
    fun play(){
        println("${person.name} play game")
    }

}

代码调用

 // 调用
    Game.play()
对象表达式

用于需要使用某个类的变体示例 但是只需使用一次

 var teacher = object :Person("teacher"){
        override fun saySomething(){
            println("i am a teacher my name is  $name")
        }
    }
伴生对象 关键字companion 一个类里只能有一个伴生对象
open class Person(_name:String){
    var name = _name
        get() = field

    open fun saySomething(){
        println("i am $name")
    }

    //伴生对象
    companion object{
        var age = "18"
        fun sayAge(){
            println("age is $age")
        }
    }
}

数据类

 //数据类 关键字data 专门用来存储数据的类
    data class Touch(val x:Int , val y:Int){

    }
数据类里的属性自动声明了 get set 方法
复写了 tostring equals copy 方法
 var touch1 = Touch(1,1)
    var touch2 = Touch(1,1)
    println(touch1.equals(touch2))

枚举类 关键字enum

和java一样

enum class Direction{
    NORTH,



    EAST,
    SOUTH,
    WEST
}
调用时直接使用枚举类名.枚举常量名 
Direction.EAST

运算重载符 关键字 operator

重载运算符可以重新定义运算规则

    data class Touch(var x:Int , var y:Int){
        // 重新定义加号运算符 + 
        operator fun plus(other:Touch) = Touch(other.x+x,other.y + y)
    }
    var touch1 = Touch(1,1)
    var touch2 = Touch(1,1)
    println(touch1.equals(touch2))
    println(touch1 + touch2)
常见操作符
操作符 函数名 描述
+ plus 把一个对象添加到另一个对象里
+= plusAssign 把一个对象添加到另一个对象里 然后给第一个对象赋值
== equals 判断两个对象是否相等
> compareTo 如果左边对象大于右边对象返回true 否则返回false
[ ] get 返回集合中指定位置的元素
.. rangeTo 创建一个 range 对象
in contains 如果对象包含在集合里 返回true

接口

定义接口

//定义接口关键字 interface
interface sayEnable{

    //定义属性
    var type:String
    // 定义属性 并提供默认实现
    val hello:String
    get() = "hello world"
    // 定义函数
    fun saySomeThing()
}

实现接口 与调用

// 实现接口 :接口名
    class Student:sayEnable{
        // 实现属性
        override var type : String = "student"
        // 实现函数
        override fun saySomeThing() {
            println("$hello i am a $type")
        }

    }

    class Teacher:sayEnable{

        override var type : String = "teacher"
        override fun saySomeThing() {
            println("$hello i am a $type")
        }
    }

    var student = Student()
    student.saySomeThing()
    var teacher = Teacher()
    teacher.saySomeThing()

抽象类

 // 定义抽象类 关键字abstract
    abstract class Person(){
        // 定义抽象方法 关键字abstract
        abstract fun doWork()
    }

    // 继承抽象类 :抽象类名
    class Staff : Person(){
        // 实现抽象方法
        override fun doWork() {
            println("i do somework")
        }
    }
    class Boss : Person(){
        override fun doWork() {
            println("i do busyness")
        }

    }
    
    //调用
    var staff = Staff()
    staff.doWork()
    var boss = Boss()
    boss.doWork()

你可能感兴趣的:(kotlin基本语法<四> [对象、数据类、枚举类、重载运算符、接口和抽象类])