【Kotlin】Kotlin 面向对象 ( 类 | 成员变量 | 成员方法 | 封装 | 继承 | 多态 )

简介: 【Kotlin】Kotlin 面向对象 ( 类 | 成员变量 | 成员方法 | 封装 | 继承 | 多态 )

文章目录

I . 创建简单类 ( 整型字段 )

II . 创建简单类 ( 整型字段 + 字符串字段 )

III . 类方法定义

IV . 封装

V . 继承

VI . 多态 与 抽象类



I . 创建简单类 ( 整型字段 )


定义类 :



① 定义类 : 定义类的关键字是 class ;


② 定义字段 : 在类后的括号内 , 使用 var 字段名称:字段类型 可以定义一个字段 ;



/**
 * 定义 Rect 类 : 定义类的关键字是 class
 *
 * 类字段 : 该类对象有两个属性 , 宽 ( width ) 和 高 ( height ) , 类型都是 int
 *
 */
class Rect (var width:Int , var height : Int)
/**
 * 函数入口
 */
fun main(args:Array<String>){
    //创建矩形
    var rect = Rect(10, 8);
    //使用字符串模板打印 Rect 对象字段
    println("Rect width : ${rect.width} , height : ${rect.height}")
}



Rect width : 10 , height : 8

1



II . 创建简单类 ( 整型字段 + 字符串字段 )


定义类 :



① 定义类 : 定义类的关键字是 class ;


② 定义字段 : 在类后的括号内 , 使用 var 字段名称:字段类型 可以定义一个字段 ;



/**
 * 定义学生类
 *
 * 定义字段 : 其含有一个字符串字段 ,
 */
class Student ( var name:String , var age:Int )
fun main(args:Array<String>) {
    //创建 Student 对象
    var student = Student("Tom", 18)
    //使用字符串模板打印 Student 对象字段
    println("student name : ${student.name} , age : ${student.age}")
}



执行结果 :


student name : Tom , age : 18




III . 类方法定义


类方法定义 : 使用 fun 关键字 , 在类中定义方法 , 在该方法中可以访问对象的成员变量 ;


/**
 * 定义学生类
 *
 * 定义字段 : 其含有一个字符串字段 ,
 */
class Student ( var name:String , var age:Int ){
    fun talk(){
        println("Student ${name} is talking")
    }
}
fun main(args:Array<String>) {
    //创建 Student 对象
    var student = Student("Tom", 18)
    //使用字符串模板打印 Student 对象字段
    println("student name : ${student.name} , age : ${student.age}")
    //调用类中的方法
    student.talk()
}


执行结果 :

student name : Tom , age : 18
Student Tom is talking




IV . 封装


封装作用 : 隐藏对象内部的属性和方法实现的细节 , 仅对外公开公共接口 ;



如 : Student 类 , 封装了 name 和 age 字段 , 和 talk 方法 ;




V . 继承


1 . 父类 : open 关键字使用 :



① 打开继承 : 只有在类前使用 open 关键字 , 只有打开了该类 , 才能有类继承该类 ;


② 允许方法重写 : 允许方法重写 , 只有 open 的函数 , 才能被子类重写 ;



/**
 * 定义父类
 *
 * open 关键字作用 : 打开继承 , 只有打开了该类 , 才能有类继承该类
 *                 允许方法重写 , 只有 open 的函数 , 才能被子类重写
 */
open class Father {
    var familyName:String = "Trump"
    fun name(){
        println("My family name is ${familyName}")
    }
    //允许方法被重写
    open fun say(){
        println("I'm father. family : ${familyName}")
    }
}



2 . 子类 : 继承类 并 重写方法 ;


/**
 * 子类代码
 *
 * 继承 : 使用 冒号 ":" , 表示继承
 */
class Son : Father() {
    //重写父类方法
    override fun say(){
        println("I'm son. family : ${familyName}")
    }
}


3 . 测试继承 :


/**
 * 测试继承
 */
fun main() {
    //创建子类对象
    var son = Son();
    //调用子类对象继承的父类的方法
    son.name();
    //调用子类对象重写的父类方法
    son.say();
}



4 . 执行结果 :


My family name is Trump
I'm son. family : Trump



VI . 多态 与 抽象类


1 . 定义抽象类 : 只有抽象类中才能定义抽象方法 ( 与 Java 不同 ) ;


/**
 * 抽象类 : 只有抽象类中才能定义抽象方法 ( 与 Java 不同 )
 */
abstract class Human ( var name:String , var age:Int ) {
    /**
     * 定义抽象方法 , 类必须是抽象类
     */
    abstract fun say();
}



2 . 实现类 1 :


/**
 * 定义 Man 类 , 继承抽象类 Human
 */
class Man(name : String, age : Int) : Human(name, age) {
    /**
     * 实现的 Human 抽象类 的 say 抽象方法
     */
    override fun say() {
       println("Man : name : ${name} , age : ${age}")
    }
}



3 . 实现类 2 :


/**
 * 定义 Women 类 , 继承抽象类 Human
 */
class Woman(name : String, age : Int) : Human(name, age) {
    /**
     * 实现的 Human 抽象类 的 say 抽象方法
     */
    override fun say() {
        println("Women : name : ${name} , age : ${age}")
    }
}


4 . 多态引入 : Man 和 Women 调用 say 方法 , 执行的不同的操作 , 就是多态的体现 ;


/**
 * 测试抽象类与多态
 */
fun main() {
    // Man 和 Women 调用 say 方法 , 执行的不同的操作
    //  这就是多态
    var tom = Man("Tom", 18);
    //Man : name : Tom , age : 18
    tom.say();
    var jerry = Woman("Jerry", 19);
    //Women : name : Jerry , age : 19
    jerry.say();
}



目录
相关文章
|
1月前
|
Kotlin
Kotlin教程笔记(20) - 枚举与密封类
Kotlin教程笔记(20) - 枚举与密封类
41 8
|
1月前
|
Java Kotlin
Kotlin教程笔记(12) - 面向对象之继承与实现
Kotlin教程笔记(12) - 面向对象之继承与实现
40 4
|
1月前
|
Java Kotlin
Kotlin教程笔记(13) - 类及成员的可见性
Kotlin教程笔记(13) - 类及成员的可见性
39 3
|
1月前
|
Java 物联网 Kotlin
Kotlin教程笔记(11) - 面向对象之抽象类与接口
Kotlin教程笔记(11) - 面向对象之抽象类与接口
26 2
|
1月前
|
存储 前端开发 Java
Kotlin教程笔记(18) - 数据类
Kotlin教程笔记(18) - 数据类
|
2月前
|
数据安全/隐私保护 Kotlin
Kotlin教程笔记(7) - 类成员
Kotlin教程笔记(7) - 类成员
|
Java Kotlin 编译器
Kotlin的类(成员方法、成员变量)
一、首先看一个简单类和方法的实现 package net.println.kotlin.chapters /** * @author:wangdong * @description: */ /**定义一个女生类...
2243 0
|
3月前
|
JSON 调度 数据库
Android面试之5个Kotlin深度面试题:协程、密封类和高阶函数
本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点。文章详细解析了Kotlin中的协程、扩展函数、高阶函数、密封类及`inline`和`reified`关键字在Android开发中的应用,帮助读者更好地理解和使用这些特性。
45 1
|
4月前
|
Android开发 开发者 Kotlin
告别AsyncTask:一招教你用Kotlin协程重构Android应用,流畅度飙升的秘密武器
【9月更文挑战第13天】随着Android应用复杂度的增加,有效管理异步任务成为关键。Kotlin协程提供了一种优雅的并发操作处理方式,使异步编程更简单直观。本文通过具体示例介绍如何使用Kotlin协程优化Android应用性能,包括网络数据加载和UI更新。首先需在`build.gradle`中添加coroutines依赖。接着,通过定义挂起函数执行网络请求,并在`ViewModel`中使用`viewModelScope`启动协程,结合`Dispatchers.Main`更新UI,避免内存泄漏。使用协程不仅简化代码,还提升了程序健壮性。
123 1
|
6月前
|
安全 Android开发 Kotlin
Android经典面试题之Kotlin延迟初始化的by lazy和lateinit有什么区别?
**Kotlin中的`by lazy`和`lateinit`都是延迟初始化技术。`by lazy`用于只读属性,线程安全,首次访问时初始化;`lateinit`用于可变属性,需手动初始化,非线程安全。`by lazy`支持线程安全模式选择,而`lateinit`适用于构造函数后初始化。选择依赖于属性特性和使用场景。**
188 5
Android经典面试题之Kotlin延迟初始化的by lazy和lateinit有什么区别?