kotlin 第五站

//Kotlin 类和对象
//Kotlin 类包含:构造函数、初始代码块、函数、属性、内部类、对象说明
//Kotlin 中使用class 关键字声明类,后面紧跟类名
class Person(sex:Int){//主构造函数

    //属性定义
    //类的属性可以用var关键字声明可变的,否则使用只读关键字val声明为不可变的
    var name:String?=null//手动实现getset方法

    get() =  field //field 为后端变量

    set(value) {value}//value 表示传入的值

    var city:String?=null//如果不写getset方法Kotlin会生成默认的get/set方法完成赋值取值
    val sex :Int?//默认实现get方法,但必须要在构造方法中初始化
    var height = 154.5f
    private set //set方法私有化,只能在本类中进行赋值,该类对象不能进行赋值
    init {//构造方法
        this.sex = sex
        this.height = 160f
    }
    fun run(){
        println("person can run")//成员函数
    }
}
class Person2(name:String){
    //类可以有二级构造函数,需要在前面添加constructor
    //如果类有主构造函数,每个次要构造函数都要直接或者间接调用这个主构造函数
    //如果一个非抽象类没有声明构造函数(主构造函数和次构造函数),会自动生成一个无参的构造函数
    //构造函数都是public,如果不想类有公共的构造函数可以声明成private constructor()
    constructor(name : String , age : Int):this(name){//次构造函数
        this.age=age
    }
    var name :String? = null
    var age : Int = 0
    init {
        this.name = name
    }
}
//抽象类
//抽象是面向对象的特征之一,类本身或类中部分成员都可以声明成abstract的。
//抽象成员在类中不存在具体的实现
//注意:无需对抽象类或成员标注open注解
open class Base{//如果类不用open修饰,该类就是final 不允许继承
    open fun f(){}// 如果方法不用open修饰,方法也是final 的不允许重写
}
abstract class Derived:Base(){
    override abstract  fun f()
}
//嵌套类  我们可以把类嵌套在其他类中
//内部类  内部类使用inner关键字来表示
class Outor{ //外部类
    private val bar = 1
    var ss = 9
    class Nested{ //嵌套类
        fun foo() = 2
    }
    inner class Inner{
        fun foo() = println("bar = $bar")
        fun innerTest(){
            var o = this@Outor //为了消除歧义,要访问来自外部作用域的this,需要使用this@lable
            println("内部类可以引用外部类的成员,例如:" + o.ss)
        }
    }
}

/**
 * 第一接口
 */
interface ITestInterface{
    fun test()
}
class Test{
    var v = "成员属性"
    fun setInterface(inter:ITestInterface){
        inter.test()
    }
}


fun main(args:Array<String>){
    var person = Person(1)// Kotlin 中没有new关键字
    person.run()
    person.city = "北京"
    person.name = "张三"
    val va = Outor.Nested().foo()//调用格式 外部类.嵌套类().嵌套方法或属性
    println(va)
    val inn = Outor().Inner()
    inn.foo()
    inn.innerTest()
    var test = Test()
    /**
     * 通过对象表达式创建接口对象,即匿名内部类实例
     */
    test.setInterface(object : ITestInterface{
        override fun test(){
            println("对象表达式创建匿名内部类的示例")
        }
    })
}
/**
 * 类的修饰符
 * 类的修饰符包括 classModifier  accessModifier
 * classModifier:类属性修饰符,标示类本身特性
 * abstract 抽象类
 * final 类不可被继承 默认属性
 * enum 枚举类型
 * open 类可继承 , 类默认是final
 * annotation 注解类
 *
 * accessModifier 访问权限修饰符
 * private 仅在同一个文件中可用
 * protected 同一个文件中或子类中可见
 * public 所有调用的地方都可见
 * internal 同一个模块中可见
 * */
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值