Kotlin入门

转载自:https://www.cnblogs.com/jaymo/articles/6924144.html

创建类的实例

要创建一个类的实例,我们就像普通函数一样调用构造函数:


1

2

3

val invoice = Invoice()

val customer = Customer("Joe Smith")

注意 Kotlin 并没有 new 关键字。

继承

在 Kotlin 中所有类都有一个共同的超类 Any,这对于没有超类型声明的类是默认超类


1

class Example // 从 Any 隐式继承

Any 不是 java.lang.Object;尤其是,它除了 equals()hashCode()toString()外没有任何成员。

要声明一个显式的超类型,我们把类型放到类头的冒号之后:


1

2

3

open class Base(p: Int)

class Derived(p: Int) : Base(p)

  

类上的 open 标注与 Java 中 final 相反,它允许其他类 从这个类继承。默认情况下,在 Kotlin 中所有的类都是 final, 对应于 Effective Java书中的 第 17 条:要么为继承而设计,并提供文档说明,要么就禁止继承。

覆盖方法

我们之前提到过,Kotlin 力求清晰显式。与 Java 不同,Kotlin 需要显式 标注可覆盖的成员(我们称之为开放)和覆盖后的成员:

 


1

2

3

4

5

6

7

open class Base {

    open fun v() {}

    fun nv() {}

}

class Derived() : Base() {

    override fun v() {}

}

  

标记为 override 的成员本身是开放的,也就是说,它可以在子类中覆盖。如果你想禁止再次覆盖,使用 final 关键字:


1

2

3

open class AnotherDerived() : Base() {

    final override fun v() {}

}

  

覆盖属性

属性覆盖与方法覆盖类似;在超类中声明然后在派生类中重新声明的属性必须以 override 开头,并且它们必须具有兼容的类型。每个声明的属性可以由具有初始化器的属性或者具有 getter 方法的属性覆盖。


1

2

3

4

5

6

7

open class Foo {

    open val x: Int get { …… }

}

class Bar1 : Foo() {

    override val x: Int = ……

}

  

你也可以用一个 var 属性覆盖一个 val 属性,但反之则不行。这是允许的,因为一个 val 属性本质上声明了一个 getter 方法,而将其覆盖为 var 只是在子类中额外声明一个 setter 方法。

伴生对象

与 Java 或 C# 不同,在 Kotlin 中类没有静态方法。在大多数情况下,它建议简单地使用 包级函数。

如果你需要写一个可以无需用一个类的实例来调用、但需要访问类内部的 函数(例如,工厂方法),你可以把它写成该类内对象声明 中的一员。

更具体地讲,如果在你的类内声明了一个伴生对象, 你就可以使用像在 Java/C# 中调用静态方法相同的语法来调用其成员,只使用类名 作为限定符。

属性和字段

声明一个属性的完整语法是


1

2

3

var <propertyName>[: <PropertyType>] [= <property_initializer>]

    [<getter>]

    [<setter>]

  

幕后字段

接口

Kotlin 的接口与 Java 8 类似,既包含抽象方法的声明,也包含 实现。与抽象类不同的是,接口无法保存状态。它可以有 属性但必须声明为抽象或提供访问器实现。


1

2

3

4

5

6

interface MyInterface {

    fun bar()

    fun foo() {

      // 可选的方法体

    }

}

  

可见性修饰符

类、对象、接口、构造函数、方法、属性和它们的 setter 都可以有_可见性修饰符_。 (getter 总是与属性有着相同的可见性。) 在 Kotlin 中有这四个可见性修饰符:private、 protected、 internal 和 public。 如果没有显式指定修饰符的话,默认可见性是 public

  • 如果你不指定任何可见性修饰符,默认为 public,这意味着你的声明 将随处可见;
  • 如果你声明为 private,它只会在声明它的文件内可见;
  • 如果你声明为 internal,它会在相同模块内随处可见;
  • protected 不适用于顶层声明。

注意 对于Java用户:Kotlin 中外部类不能访问内部类的 private 成员。

模块

可见性修饰符 internal 意味着该成员只在相同模块内可见。更具体地说, 一个模块是编译在一起的一套 Kotlin 文件:

  • 一个 IntelliJ IDEA 模块;
  • 一个 Maven 或者 Gradle 项目;
  • 一次 <kotlinc> Ant 任务执行所编译的一套文件。

原文地址:https://www.cnblogs.com/silentdoer/p/8973181.html

时间: 2024-10-10 08:51:57

Kotlin入门的相关文章

Kotlin入门(32)网络接口访问

手机上的资源毕竟有限,为了获取更丰富的信息,就得到辽阔的互联网大海上冲浪.对于App自身,也要经常与服务器交互,以便获取最新的数据显示到界面上.这个客户端与服务端之间的信息交互,基本使用HTTP协议进行通信,即App访问服务器的HTTP接口来传输数据.HTTP接口调用在Java代码中可不是一个轻松的活,开发者若用最基础的HttpURLConnection来编码的话,至少要考虑以下场景的处理:1.HTTP的请求方式是什么,是GET还是POST还是PUT还是DELETE?2.HTTP的连接超时时间是

Kotlin入门(12)类的概貌与构造

上一篇文章提到泛型函数appendString是在类外面定义,这不免使人疑惑,类里面又该怎样定义成员函数呢?为解答这个疑问,接下来的几篇文章将好好描述一下Kotlin如何操作类及其对象,本篇文章先对类的定义进行说明并加以运用. 之前我们已经多次见过的类MainActivity,在Java代码中该类的写法如下所示: public class MainActivity extends AppCompatActivity { } 而对应的Kotlin代码是下面这样的: class MainActivi

Kotlin 入门环境搭建

这次的Google I/O大会 ,一大热点:Kotlin 被列为Android一级开发语言. 下面介绍如何在Android Studio中是用Kotlin. 1.下载Kotlin 3.0 Google 下载地址:https://developer.android.com/studio/preview/index.html 腾讯微云下载地址:https://share.weiyun.com/542279b824eebfbcdff7ea3b3753ed9f waiting. waiting... 2

Kotlin入门(16)容器的遍历方式

Kotlin号称全面兼容Java,于是乎Java的容器类仍可在Kotlin中正常使用,包括大家熟悉的队列ArrayList.映射HashMap等等.不过Kotlin作为一门全新的语言,肯定还是要有自己的容器类,不然哪天Java跟Kotlin划清界限,那麻烦就大了.与Java类似,Kotlin也拥有三类基本的容器,分别是集合Set.队列List.映射Map,然后每类容器又分作只读与可变两种类型,这是为了判断该容器能否进行增删改等变更操作.Kotlin对修改操作很慎重,比如变量用val前缀表示不可修

Kotlin入门(17)等式判断的情况

话说等式可是编程语言最基本的表达式之一,不管哪种高级语言,无一例外都采用双等号"=="判断两个变量是否相等:就算是复杂的对象,在Java中也可通过equals函数判断两个实例是否相等.按理说这些能够满足绝大多数场合的要求了,那么Kotlin又给等式判断加入了哪些新概念呢?下面就让我们好好探讨一下具体业务中的等式判断. 结构相等基本数据类型如整型.长整型.浮点数.双精度数.布尔型,无论是在C/C++还是在Java抑或是在Kotlin,都使用双等号"=="进行两个变量的

Kotlin入门(20)几种常见的对话框

提醒对话框手机上的App极大地方便了人们的生活,很多业务只需用户拇指一点即可轻松办理,然而这也带来了一定的风险,因为有时候用户并非真的想这么做,只是不小心点了一下而已,如果App不做任何提示的话,继续吭哧吭哧兀自办完业务,比如转错钱了.误删资料了,往往令用户追悔莫及.所以对于部分关键业务,App为了避免用户的误操作,很有必要弹出消息对话框,提醒用户是否真的要进行此项操作.这个提醒对话框便是App开发常见的AlertDialog,说起这个AlertDialog,安卓开发者都有所耳闻,该对话框不外乎

Kotlin入门(22)适配器的简单优化

列表视图 为实现各种排列组合类的视图(包括但不限于Spinner.ListView.GridView等等),Android提供了五花八门的适配器用于组装某个规格的数据,常见的适配器有:数组适配器ArrayAdapter.简单适配器SimpleAdapter.基本适配器BaseAdapter.翻页适配器PagerAdapter.适配器的种类虽多,却个个都不好用,以数组适配器为例,它与Spinner配合实现下拉框效果,其实现代码纷复繁杂,一直为人所诟病.故而在下拉框一小节之中,干脆把ArrayAda

Kotlin入门(23)适配器的进阶表达

前面在介绍列表视图和网格视图时,它们的适配器代码都存在视图持有者ViewHolder,因为Android对列表类视图提供了回收机制,如果某些列表项在屏幕上看不到了,则系统会自动回收相应的视图对象.随着用户的下拉或者上拉手势,已经被回收的列表项要重新加载到界面上,倘若每次加载都得从头创建视图对象,势必增加了系统的资源开销.所以ViewHolder便应运而生,它在列表项首次初始化时,就将其视图对象保存起来,后面再次加载该视图时,即可直接从持有者处获得先前的视图对象,从而减少了系统开销,提高了系统的运

Kotlin入门(24)如何自定义视图

Android提供了丰富多彩的视图与控件,已经能够满足大部分的业务需求,然而计划赶不上变化,总是有意料之外的情况需要特殊处理.比如PagerTabStrip无法在布局文件中指定文本大小和文本颜色,只能在代码中通过setTextSize和setTextColor方法来设置.这用起来殊为不便,如果它能像TextView那样直接在布局指定文本大小和颜色就好了:要想让PagerTabStrip支持该特性,就得通过自定义视图来实现,而自定义视图的第一种途径便是自定义属性.仍旧以翻页标题栏PagerTabS