kotlin - 使用不同的方式初始化父类

前言

谁都有难过的时候 ,谁都有孤独的时候 ,别伤心别难过这个时候就是需要静下心来做好你想做的事


创建多个构造器

可以使用constructor关键字在一个类中声明多个构造器

class MyButton:View{
    constructor(ctx:Context):super(ctx){
      //通过super关键字调用父类的构造器
   }
   constructor(ctx:Context,attr:AttrbuteSet):super(ctx,attr){
      //通过super关键字调用父类的构造器
     }
}

可以通过this关键字从一个类的构造方法中调用你自己的类的另外的一个构造方法

class MyButton:View{
 // 使用this 关键字调用自己的类中的另外的一个构造器
 constructor(cox:Context):this(ctx,MY_STYLE){
     // 执行构造方法中的处理逻辑
  }
  //使用super关键字实现对父类的调用
 constructor(ctx:Context,attr:AttributeSet):super(ctx,attr){
    //  执行构造方法中的处理逻辑
   }
}

实现在接口中声明属性

可以在接口中可以包含抽象属性的声明,实现接口的类必须对抽象属性进行实现

  • 可以在类的主构造器中使用override对属性进行实现
  • 可以通过override关键字和get() 结合对属性的实现
interface{
   val nickname:String
}

class PrivateUser(override val nickname:String):User

class SubscribingUser(val email:String):User{
   override val nickname:String
      get()= email.substringBefore('@')
}
class  FacebookUser(val accountId:Int):User{
    override val nickname = getFacebookName(accountId)
}

在接口中不但可以声明抽象属性 还可以声明一个包含自定义的get() 的属性,但是在接口中声明属性没有完全的对支持字段的访问权限。

通过getter和setter访问支持字段

在这之前我们使用过两种属性一种是用来存储数值的属性,另外一种是有一个只点一的访问器每次访问的时候计算属性的值
备注:支持字段可以理解为一个存储属性的数值的字段,声明属性的时候默认的get() ,set() 会为属性生成支持字段。

class User(val name:String){
 var address:String = "unspecified"
       set(value:String){
        println("""
       Address was changed for $name:
       "$field"-> "$value".""".trimIndent())
       field = value
}
}

我们可以通过setter和getter方法获取支持字段值 在get() 和set() 对属性的数值进行自己的逻辑处理

猜你喜欢

转载自blog.csdn.net/xh_ssh/article/details/80673068