kotlin学习笔记——类、函数、接口

简介: 1、类类是空的可以省略大括号, 如:class A(name: String)注意:kotlin与java的一个不同点,代码句结尾不必加“;”号

1、类


类是空的可以省略大括号, 如:

class A(name: String)

注意:kotlin与java的一个不同点,代码句结尾不必加“;”号


2、类继承


默认是final的,所以只能继承那些明确声明open或abstract的类。


3、函数


一切kotlin函数都会返回一个值,如果没有指定默认返回一个Unit类

可以省略结尾分号

当返回值用一个表达式即可计算出来,可以使用等号代替大括号,如:

fun add(x: Int, y: Int) Int = x + y


4、默认参数


为参数指定一个默认值,这样这个参数就成了可选,如:

fun toast(msg: String, length: Int = Toast.LENGTH_LONG){

    ...

}

使用时就可以不传length这个参数,如:

toast("test toast")


5、通过参数名传参


假设函数:

fun toast(msg: String, tag: String = "default", length: Int = Toast.LENGTH_LONG)

可以这样使用:

toast(msg = "hello", length = 1000)

这样可以忽略中间某个默认参数


6、实例化


实例化省略new关键字,如

var layoutManager = LinearLayoutManager(this)


7、伴随对象companion object


在kotlin中使用companion object来定义一些静态属性、常量和静态函数,这个对象被这个类所有对象共享,类似java中的静态变量和方法, 如:


class Circle(var r: Float){
     companion object{
          var pi = 3.14f
     }
     fun getLength(): Float{
          return 2 * pi * r
     }
}
复制代码


8、接口


kotlin的接口与java接口不同之处在于kotlin的借口可以包含代码,如:

interface TestInterface {
    var i : Int
    fun test(){
        i = 3
    }
    fun interfaceMethod()
}
复制代码


可以看到在接口中可以定义变量和函数,而实现接口的子类可以直接使用变量和函数,


如:


class TestInterfaceClass(override var i: Int) : TestInterface{
    override fun interfaceMethod() {
        test()
        i = 4
    }
}
复制代码


9、别名


在java中,如果有两个相同名称的类,在同一个类中使用时,其中一个类需要使用完整包名。


在kotlin中,可以指定一个别名来避免使用完整包名,如:


import com.test.common.Product
import com.test.model.Product as ProdectModel
复制代码


这样在代码中只要使用ProductModel就可以了,如:


var productA = Product()
var productB = ProdectModel()
复制代码


但是注意,有了别名的类就不能在该类中使用原有的类名了。


10、修饰符


在kotlin中默认的修饰符是public,节约了很多时间和字符。


kotlin中的修饰符有private\protected\internal\public

其中internal是整个module可见的,当然它依赖于所在领域的可见性(比如private类下的internal函数)。这里的module就是android studio中的module概念,是指可以单独编译、运行、测试的独立功能性模块。


所有构造器默认都是public的,但是可以用下面的语法来修改可见性:

class C private contructor(a: Int){ ... }


11、内部类


在kotlin中内部类如果是普通类,则无法访问外部类成员(类似java中的static静态内部类),如


class ModelA{
     val a = 1
     class ModelB{
          val b = a
     }
}
复制代码


上面的val b = a代码就会报错无法编译。

如果想在内部类访问外部类成员,需要用inner修饰,如


class ModelA{
     val a = 1
     inner class ModelB{
          val b = a
     }
}
复制代码


这样就可以正常编译运行。


目录
相关文章
|
1月前
|
Java 调度 Android开发
Android经典实战之Kotlin的delay函数和Java中的Thread.sleep有什么不同?
本文介绍了 Kotlin 中的 `delay` 函数与 Java 中 `Thread.sleep` 方法的区别。两者均可暂停代码执行,但 `delay` 适用于协程,非阻塞且高效;`Thread.sleep` 则阻塞当前线程。理解这些差异有助于提高程序效率与可读性。
46 1
|
1月前
|
Kotlin
Kotlin 面向对象编程 (OOP) 基础:类、对象与继承详解
面向对象编程(OOP)是一种编程范式,它通过创建包含数据和方法的对象来组织代码。相较于过程式编程,OOP 提供了更快更清晰的结构,有助于遵守 DRY(Don't Repeat Yourself)原则,使代码更易于维护和扩展。在 Kotlin 中,类和对象是 OOP 的核心。类作为对象的模板,定义了对象的行为和状态;对象则是类的具体实例。例如,`Car` 类可以定义汽车的品牌、型号等属性,以及如驾驶和刹车等功能。通过构造函数可以快速初始化对象的属性。此外,Kotlin 支持继承机制,子类可以从父类继承属性和方法,促进代码重用。
31 2
|
27天前
|
设计模式 安全 编译器
Kotlin 中的密封类:详解与应用
【8月更文挑战第31天】
58 0
|
27天前
|
设计模式 安全 数据库连接
|
27天前
|
存储 前端开发 编译器
深入理解Kotlin中的数据类及其应用
【8月更文挑战第31天】
14 0
|
1月前
|
Java Android开发 开发者
Kotlin 循环与函数详解:高效编程指南
高效编程实践 • 避免不必要的循环 - 尽量使用集合操作如 map、filter 来减少显式的循环。 • 使用尾递归优化 - 对于需要大量递归的情况,考虑使用尾递归以优化性能。 • 内联函数 - 对于传递 Lambda 表达式的函数,使用 inline 关键字可以减少运行时开销。 通过上述指南,您应该能够更好地理解 Kotlin 中的循环和函数,并能够编写更加高效和简洁的代码。Kotlin 的设计哲学鼓励开发者编写易于理解和维护的代码,而掌握循环和函数是实现这一目标的关键步骤。 如果您想了解更多关于 Kotlin 的循环和函数的信息,以下是一些官方文档和资源,它们可以提供额外的参考
35 1
|
1月前
|
Java Kotlin
Kotlin 循环与函数详解:高效编程指南
Kotlin中的循环结构让你能轻松遍历数组或范围内的元素。使用`for`循环结合`in`操作符,可以简洁地访问数组中的每个项,如字符串数组或整数数组。对于范围,可以用`..`来定义一系列连续的值并进行迭代。此外,Kotlin支持通过`break`和`continue`控制循环流程。函数则允许封装可复用的代码块,你可以定义接受参数并返回值的函数,利用简写语法使代码更加紧凑。例如,`myFunction(x: Int, y: Int) = x + y`简洁地定义了一个计算两数之和的函数。
39 1
|
2月前
|
安全 Android开发 Kotlin
Android经典面试题之Kotlin中常见作用域函数
**Kotlin作用域函数概览**: `let`, `run`, `with`, `apply`, `also`. `let`安全调用并返回结果; `run`在上下文中执行代码并返回结果; `with`执行代码块,返回结果; `apply`配置对象后返回自身; `also`附加操作后返回自身
41 8
|
2月前
|
Swift iOS开发 Kotlin
苹果iOS新手开发之Swift中实现类似Kotlin的作用域函数
Swift可通过扩展实现类似Kotlin作用域函数效果。如自定义`let`, `run`, `with`, `apply`, `also`,增强代码可读性和简洁性。虽无直接内置支持,但利用Swift特性可达成相似功能。
49 7
|
2月前
|
Android开发 Kotlin
Android面试题之kotlin中怎么限制一个函数参数的取值范围和取值类型等
在Kotlin中,限制函数参数可通过类型系统、泛型、条件检查、数据类、密封类和注解实现。例如,使用枚举限制参数为特定值,泛型约束确保参数为Number子类,条件检查如`require`确保参数在特定范围内,数据类封装可添加验证,密封类限制为一组预定义值,注解结合第三方库如Bean Validation进行校验。
49 6