Kotlin笔记—类

1.1 类的构造

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
		}
    }

 Kotlin写法与Java写法的区别
 1 Kotlin省略了关键字public,源于它默认是开放的
 2 Kotlin用冒号“:”代替extends,也就是通过冒号表示继承关系
 3 Kotlin进行继承时,父类后面多了括号"()" 
 4 Kotlin对类进行初始化的函数名称叫init.
 5 Kotlin打印日志叫println()
 6 K..在创建实例省略了关键字new.

1.2 类的构造函数

    直接上代码:

class Animal constructor(context: Context,name:String){
    init {
        println("Animal:这是动物")
    }
    constructor(context: Context, name:String,sex:Int): this(context,name){
        var sexName:String= if (sex==0) "公" else "母"
        println("Animal:这是动物 hahaha $sexName")
    }
}

使用
 val btn:Button =findViewById(R.id.btn_base);
        btn.setOnClickListener{
           var animal=Animal(this,"Hello")
            val animal2=Animal(this,"HeiHei",0)
            tv_base.text="WWWWWWWWWWW"
      }

日志:

2895-2895/com.data.basekotlin I/System.out: Animal:这是动物
2895-2895/com.data.basekotlin I/System.out: Animal:这是动物
2895-2895/com.data.basekotlin I/System.out: Animal:这是动物 hahaha 公

分析:init会出现两次 原因:二级构造函数从属于主构造函数

修改:

class AnimalSeparate {
    constructor(context:Context,name: String){
        println("这是只$name")
    }
    constructor(context: Context,name: String,sex:Int){
        var sexName:String= if(sex==0) "公" else "母"
        println("ljt,这是${name}是${sexName}的")
    }
}

两个二级构造函数没有从属关系。

2.伴生对象

Kotlin取消了static,引入了伴生对象,理解为“影子”,利用它可以间接 实现静态成员的功能。

class WildAnimalCompanion (var name:String,val sex:Int=0) {
    var sexName:String
    init {
        sexName=if (sex==0) "公" else "母"
    }
    fun getDesc(tag:String):String{
        return "欢迎来到$tag: 这只${name}是${sexName}的"
    }
    companion object WildAnimal{
        fun jedgeSex(sexName:String):Int{
            var sex:Int = when (sexName){
                "公","雄" -> 0
                "母","雌" -> 1
                else -> -1
            }
            return sex
        }
    }
}
使用:
            val btn:Button =findViewById(R.id.btn_base);
        val sexArray:Array<String> = arrayOf("公","母","雄","雌")
        btn.setOnClickListener{
//           var animal= AnimalSeparate(this, "Hello")
//            val animal2= AnimalSeparate(this, "HeiHei", 0)
//            tv_base.text="WWWWWWWWWWW"
            var count:Int=1
            var sexName:String=sexArray[count++%4]
            tv.text="\"$sexName\"对应的类型是${WildAnimalCompanion.jedgeSex(sexName)}"
        }

3 成员属性

成员属性: 既然属性字段和构造函数的入参存在一一对应关系,那么可以通过某种机制让编译器自动对其命名与赋值。

class WildAnimalCompanion (var name:String,val sex:Int=0) {
}

class WildAnimalMember(var name:String,val sex:Int=0) {
    var sexName:String
    init {
        sexName= if (sex==0) "公" else "母"
    }
}


使用:
            var count:Int=1
            var animal = when(count %2){
                0 -> WildAnimalMember("gong")
                else -> WildAnimalMember("gong",12)
            }
            tv.text="这只${animal.name}是${animal.sexName}的"

4 成员方法

class WildAnimalMember(var name:String,val sex:Int=0) {
    var sexName:String
    init {
        sexName= if (sex==0) "公" else "母"
    }
    fun getDesc(tag:String):String{
        return "欢迎$tag:这只是${name}是${sexName}的"
    }
}

使用:
 var count:Int=1
 var animal = when(count %2){
 0 -> WildAnimalMember("gong")
 else -> WildAnimalMember("gong",12)
 }
 tv.text="这只${animal.name}是${animal.sexName}的 ${animal.getDesc("动物园")}"  

 

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值