星空网 > 软件开发 > 操作系统

浅谈Kotlin(三):类

浅谈Kotlin(一):简介及Android Studio中配置

浅谈Kotlin(二):基本类型、基本语法、代码风格

浅谈Kotlin(三):类

 

前言:

  已经学习了前两篇文章,对Kotlin有了一个基本的认识,往后的文章开始深入介绍Kotlin的实战使用。

  本篇介绍Kotlin中类的使用。

 

一、表现形式

  首先看一段Java中定义类的形式,定义三个属性,每一个属性对应一个get、set方法,有一个toString()方法

/** @author xqx* @emil djlxqx@163.com* create at 2017/5/18* description: 自己写的类,人,包含姓名,年龄,性别*/public class XPatient {  private String name; //姓名  private int age;   //年龄  private int sex;   //性别 1、男  2、女  public String getName() {    return name;  }  public void setName(String name) {    this.name = name;  }  public int getAge() {    return age;  }  public void setAge(int age) {    this.age = age;  }  public int getSex() {    return sex;  }  public void setSex(int sex) {    this.sex = sex;  }  @Override  public String toString() {    return "XPatient{" +        "name='" + name + '\'' +        ", age=" + age +        ", sex=" + sex +        '}';  }}

  

  接下来我们看这个类对应的Kotlin的表现形式:

  跟着下面的操作做一个处理,让我们这个类对应的 .java 文件转化为对应的 .kt 文件

  浅谈Kotlin(三):类images/loading.gif' data-original="http://images2015.cnblogs.com/blog/493196/201705/493196-20170519172019197-2084036469.png" >

  

  之后转换完成我们看下转换后的代码:

  看一下变化:

      1、代码量少了很多

      2、get/set方法都没有了

      3、只有一个重写的toString()方法。

      4、类的属性都有一个默认的初始值

/** @author xqx* @emil djlxqx@163.com* create at 2017/5/18* description: 自己写的类,人,包含姓名,年龄,性别*/class XPatient {  var name: String? = null //姓名  var age: Int = 0   //年龄  var sex: Int = 0   //性别 1、男  2、女  override fun toString(): String {    return "XPatient{" +        "name='" + name + '\'' +        ", age=" + age +        ", sex=" + sex +        '}'  }}

 

二、定义类的构造方法

  首先看Java类的构造

  Java中定义构造方法特点:

      1、方法名需要和类名一致

      2、参数可以任意属性值的组合,也可以不写

      3、可以有多个构造方法

  //无参数的构造方法  public JPatient() {  }  //类的三个属性值都需要的构造方法  public JPatient(String name, int age, int sex) {    this.name = name;    this.age = age;    this.sex = sex;  }

  

  在看Kotlin的类,这里有个知识点 :Kotlin类中可以有一个主构造方法 和 一个至多个二级构造方法。

  ①、主构造方法的的写法:

    直接写在类的头部,类似于定义方法的形式 加一个参数。

    需要添加 init{} 代码块来处理对主构造方法传来的参数的初始化操作。

class XPatient(name: String? ,age: Int ,sex: Int) { //主构造方法的形式 ,类名后面加(属性名 : 属性类型 .....)  var name: String? = null //姓名  var age: Int = 0   //年龄  var sex: Int = 0   //性别 1、男  2、女  /*进行主构造函数的初始化,自己定制*/  init {    this.name = name;    this.age = age+1;    this.sex = sex-1;  }  ....}

    

  ②、二级构造方法:

    为了实现类似于Java中一个类具有多种构造方法

    二级构造函数最终委托到主构造方法,中间可以有0个或多个中间二级构造方法。

    个人理解,如果涉及到一个类有多个构造方法的时候,主构造方法尽量设为无参的。

    如下:当创建一个对象XPatient("Alice",18); 的时候 会调用二级构造方法 constructor(name: String?,age : Int):this(name){}

       该二级构造方法再委托(调用)对应的一个参数name(String) 对应的二级构造方法  constructor(name:String?):this( ){}

       一个参数的该二级构造方法最终委托(调用)主构造方法

    下面举例测试:

class XPatient() {
var name: String? = null //姓名
var age: Int = 0 //年龄
var sex: Int = 0 //性别 1、男 2、女


/*进行主构造函数的初始化*/
init {
Log.i("xqxinfo","调用了无参数的主构造方法");
}

/*传入(name)*/
constructor(name:String?):this( ){
this.name = "Alice";
Log.i("xqxinfo","调用了一个参数的二级构造方法");

}
/*传入(name,age)*/
constructor(name: String?,age : Int):this(name){
this.age = age+1;
Log.i("xqxinfo","调用了两个参数的二级构造方法");
}

override fun toString(): String {
return "XPatient{" +
"name='" + name + '\'' +
", age=" + age +
", sex=" + sex +
'}'
}
}

    进行测试:

val patient = XPatient("Alice", 18)
Log.i("xqxinfo", "该对象的属性值" + patient.toString())

    打印结果:

05-19 18:08:05.621 25081-25081/? I/xqxinfo: 调用了无参数的主构造方法
05-19 18:08:05.621 25081-25081/? I/xqxinfo: 调用了一个参数的二级构造方法
05-19 18:08:05.621 25081-25081/? I/xqxinfo: 调用了两个参数的二级构造方法
05-19 18:08:05.621 25081-25081/? I/xqxinfo: 该对象的属性值XPatient{name='Alice', age=19, sex=0}


    这里看一下,不要以为先执行了主构造方法,然后再执行一个参数的,再执行两个参数的二级构造方法。

    实际还是先执行了创建对象的那个参数 对应的两个参数的二级构造方法,两个参数的构造方法调用一个参数的构造方法,一个参数的又调用了主构造方法。

    所以当主构造方法执行完之后,会返回来执行一个参数的构造方法内的处理,一个参数的构造方法执行完了,再执行两个参数的构造方法内的处理。类似于递归。

      所以打印结果如上代码所示。

 

二、类的继承

  关于Kotlin的类有几个知识点需要先知道:

    1、默认情况下,任何类都是根继承自Any(类似于Java中的Object)

    2、默认情况下,任何类都是不可继承的(final)

    3、只有被申明open或者abstract的类可以被继承

 

  继承形式:

 

open class Animal(name: String) // 被继承的类 需要open修饰class Person(name: String, surname: String) : Animal(name)   //继承Animal类的类

 

 

 

注:方法即函数

 




原标题:浅谈Kotlin(三):类

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

亚马逊“超级卖家”Boulevard疫情下的转型:https://www.kjdsnews.com/a/690934.html
2022年亚马逊新店铺注册要注意的几点:https://www.kjdsnews.com/a/690935.html
Shopee怎样贴面单?Shopee物流面单要求:https://www.kjdsnews.com/a/690936.html
亚马逊如何搞定中东最后一公里:自取包裹:https://www.kjdsnews.com/a/690937.html
黑五前卖家有多难?恶搞乱象不止,亚马逊工人全球罢工...:https://www.kjdsnews.com/a/690938.html
引流出单!独立站可以报哪些站外推广渠道?:https://www.kjdsnews.com/a/690939.html
美众议院对TikTok“动手”,下一步该怎么在TikTok上营销?:https://www.kjdsnews.com/a/1836587.html
速卖通在韩国争议不断,投诉量激增两倍:https://www.kjdsnews.com/a/1836588.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流