Quantcast
Channel: CSDN博客移动开发推荐文章
Viewing all articles
Browse latest Browse all 5930

Kotlin搞起来——4.类与对象

$
0
0

Kotlin搞起来——4.类与对象

标签: AndroidPocket


PS:有小伙伴说配图有点意思,嘿嘿,今天的配图是:

    本节我们继续来学习Kotlin的语法,这节学习的是非常常用的类与对象,
把这四节的内容都掌握了,基本就算kotlin入门了~不逼逼,开始本节内容~


1.类的定义与对象实例化

    Kotlin不同于Java,允许在一个文件中定义多个类
首先关注的一点是:类,成员变量,成员方法的作用域,写个简单的例子:

然后打开生成 .class文件 可以看到对应的修饰符:



会自动生成getter和setter方法:
  
同样会生成getter和setter方法!private修饰的只生成getter方法!

一清二楚,另外kotlin中还允许直接class 类名没有类实体,一般用于
表示概念(没什么卵用)!而创建一个类的对象以及方法调用同样很简单:

这里调用设置对象的属性,其实是调用对应生成的setXXX方法!对了,你还可以
自定义getter和setter方法

然后这里有个坑,就是如果你写成get() = trueHeight,会不停调用自身,然后OOM!
网上有人说在前面加个$,但实测不行,如果有解决方案的务必告知我!
另外,你还可以再get和set方法前加private,这样可以禁止外部调用!


2.构造器(构造方法)

Kotiln中的构造器有三种:

主构造器

  • 1.如果一个非抽象类没有声明任何主次构造器,那么会默认生成一个public无参的主构造器!
  • 2.一个类只有一个主构造器,类头部的一部分,在类名后,constructor(参数列表)
  • 3.主构造器中不能包含任何代码,如果想写一些初始化代码,可以写到init初始化代码块中!

使用示例

辅助构造器

  • 1.写在类中,可以有一个或者多个,用constructor关键字标识!
  • 2.可以通过this()调用其他辅助构造器,但是任何一个辅助构造器都必须调用主构造器

使用示例

私有主构造器

其实就是在主构造器前加上一个private,然后就只能通过辅助构造器来实例化对象


3.继承

Kotlin中继承父类或者实现接口,直接用 : 引号,如果有多个可以用逗号隔开,比如:

还记得一开始看class文件,类的默认修饰符是:public final,final意味着,这个类
是不能改变的,如果你想继承这个类,进行一些重写的话,你需要把class前加上 open 关键字,
子类构造方法需实现父类构造方法,而方法的修饰符也是 final 的,如果你想重写
某个方法,同样要为方法加上 open 关键字,而在重写方法处加上 override 关键字;
另外,你还可以用 super 关键字来调用父类中的方法,这点和Java是一样的。

使用示例


4.接口与抽象类

Kotlin中的接口类似于Java8,支持抽象方法抽象属性,还支持包含实现的方法
接口与其中的方法默认是 open 的和Java一样,使用 interface 声明!
接口与抽象类的区别在于:接口不能存储状态数据,可以拥有属性,但是这些属性必须
抽象的,或者提供访问器的自定义实现!

使用示例

另外,如果一个需要实现的类或接口中包含同名方法,可以使用<>来指明调用的是哪个
父类方法!比如:


5.抽象类

和接口类似,不顾默认是open的,但是对于抽象成员,需要使用 abstract关键字声明!

使用示例


7.内部类

类可以嵌套在其他类中,如果只是简单的嵌套,内部类是无法访问外部类成员的!
如果你想在内部类中访问外部成员,你需要使用 inner 关键字进行声明。

而匿名内部类就不说了,不知道的可以看回第一节。


8.单例对象与伴生对象

Kotlin中没有 静态属性和方法,如果你想实现类似于单例的功能
你可以使用关键字 object 声明一个对象,对象的构造器不能提供构造器参数
第一次使用的时候会被初始化,可用于提供常量共享不可变对象

使用示例

除此之外,Kotlin中还提供了 伴生对象 这种东西,用companion关键字声明,
可以直接类.成员访问成员,有点类似于静态成员,但是在运行时,它们依旧是实体
的实例成员,另外使用companion关键字时,伴生对象的名称可以省略

使用示例

如果你硬是要搞成Java中的静态成员和静态方法的话,你可以用:

静态成员

  • @JvmField注解:生成与该属性相同的静态字段
  • lateinit关键字:延迟初始化(没用过)
  • const()关键字:将 Kotlin 属性转换成 Java 中的静态字段(定义常量用)

静态方法

  • @JvmStatic注解:在单例对象和伴生对象中生成对应的静态方法

关于这里更多内容可见:http://kotlinlang.cn/docs/reference/object-declarations.html


9.数据类

就是只表示数据的类,用 data 进行声明,默认基于构造方法中实现了:
toString(), componentN(), copy(), equals() 和 hashCode() 方法,
另外,不在构造方法中定义的属性不会产生在toString()的结果中!
Data类可以直接使用 == 进行比较。

使用示例


10.枚举类

Kotlin中的枚举与Java中基本类似,用 enum 声明为枚举类

使用示例

  输出: 

除此之外你还可以通过valueOf(“名字”)来匹配或者values()拿到一个Array,
然后进行遍历。


11.封闭类

限制类的层次结构,值只能是集合中的类型,不饿可以是其他任何类型
可以理解成”扩展的枚举类“,枚举中的实例是唯一的,而封闭类可以
有很多实例,他们可以有不同的状态,使用关键字 sealed 声明
(内部的类都是本身的子类),直接子类必须都写在封闭类中!!!
有一点要注意:封闭类的子类的扩展可以在任何地方,不需要写在封闭类内部!
使用密封类的最主要的的好处体现在你使用 when 表达式。
可以确保声明可以覆盖到所有的情形,不需要再使用 else 情形。
没用过,直接祭出官方示例:


本章小结

    本节对Kotlin中与类和对象有关的知识点进行了全面的讲解:

  • 1.类的定义与对象实例化
  • 2.构造器(构造方法)
  • 3.继承
  • 4.接口与抽象类
  • 5.抽象类
  • 7.内部类
  • 8.单例对象与伴生对象
  • 9.数据类
  • 10.枚举类
  • 11.封闭类

相信对你对Kotlin的认识又更进一步了,大块的东西已经在这四节里面说完,
然后接下来的一节是一些小知识点补充,在下一节是结合Anko重构之前写个
的一个很小的项目,再接着是番外篇——实际开发中用Kotlin中的一些技巧
和实例~敬请期待!

如果觉得这个系列对你学习Kotlin有所帮助,点个喜欢呗~

本节参考文献如下


作者:zpj779878443 发表于2016/11/16 19:28:05 原文链接
阅读:49 评论:0 查看评论

Viewing all articles
Browse latest Browse all 5930

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>