IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Kotlin入门笔记(五)类与对象,继承,构造函数 -> 正文阅读

[移动开发]Kotlin入门笔记(五)类与对象,继承,构造函数

前言:本教程最好在有JAVA的基础下进行学习

一、类与对象

???????? class 关键字来声明类,与 java 相同。

eg.

(1)定义一个 Person 类:

class Person {
    var name = ""
    var age = 0

    fun eat() {
        println(name + " is eating. He is " + age + " years old.")
    }
}

(2)实例化Person这个类:

val p = Person()

????????kotlin 舍弃了 java 的 new 关键字。之所以这样做,是因为你调用了某个类的构造函数,你的意图只可能是对这个类进行初始化。

(3)main函数中:

fun main() {
    val p = Person()
    p.name = "Jack"
    p.age = 19
    p.eat()
}

运行截图:

二、继承

这里就不得不提到kotlin的几个特性:

Kotlin的特性:

????????Kotlin 默认所有非抽象类是不能被继承的

eg:

下面我定义了一个Student类,想让它继承刚刚的 Person 类

class Student {
    var sno = ""
    var grade = 0
}

?此时刚刚的Person类是无法被继承的,需要在前面加上 open 关键字,如下图所示:

open class Person {
    var name = ""
    var age = 0

    fun eat() {
        println(name + " is eating. He is " + age + " years old.")
    }
}

加上了open关键字后就是在告诉编译器,Person 这个类是专门为继承而设计的。这样Person类就允许被继承了。

然后让 Student 类就可以去继承 Person 类,如下:

class Student : Person() {
    var sno = ""
    var grade = 0
}

Kotlin 的 继承的关键字也是重 extends 变为了 :? ,这个对于学过C#的朋友就比较熟悉了。但是为什么被继承的类后面有一对小括号呢?因为涉及到 Java 继承特性的规定,子类的构造函数必须调用父类的构造函数,这个规定在Kotlin中也要遵守。后面将会解释?主构造函数?和?次构造函数?了。

三、构造函数

(1) 主构造函数

????????每个类都会默认有一个不带参的主构造函数(同java的构造函数)。当然也可以显示的声明参数。但是注意,主构造函数没有函数体!

class Student(val sno : String , val grade : Int) : Person() {
}

实例化:

val student = Student("a123",5)

可是,主构造函数没有函数体,要实现一些逻辑该怎么办呢?

Kotlin给我们提供了一个 init 结构体,所有主构造函数中的逻辑都可以写在里面

class Student (val sno : String , val grade : Int) : Person() {
    init {
        println("sno is " + sno)
        println("grade is " + grade)
    }
}

(2) 次构造函数

Kotlin 规定,

  1. 任何一个类只有一个主构造函数,但是可以有很多的次构造函数。
  2. 次构造函数可以实例化一个类,但是它有函数体。
  3. 当一个类既有?主构造函数?又有?次构造函数 ,所有次构造函数必须调用主构造函数(包括间接调用)。

eg.

通过上面的学习,Person的类也可以这样写:

open class Person(val name : String , val age : Int) {
    fun eat() {
        println(name + " is eating. He is " + age + " years old.")
    }
}

所以我们让 Student类 去继承 Person类

class Student (val sno : String , val grade : Int , name : String , age : Int) : Person(name , age) {
    constructor(name : String ,age : Int) : this("",0,name,age) {
        
    }
    constructor() : this("" , 0) {
        
    }
}

次构造函数是通过 constructor?关键字来定义的,这里定义了两个次构造函数:第一个次构造函数接收name和age的参数;第二个构造函数不接收任何参数,它通过 this?调用了我们第一个次构造函数,并将 name 和 age 赋初始值。由于第二个 次构造函数 间接调用第一个 次构造函数?,所以依然是合法的。

所以现在我们有三种方式来对Student初始化:

val student1 = Student()
val student2 = Student("Tom",15)
val student3 = Student("a123",5,"Jack",18)

特殊情况:

一个类里面只有次构造函数,没有主构造函数。这种情况很少见,但在Kotlin中是允许的。当一个类没有显示地定义主构造函数且定义次构造函数时,它就是没有主构造函数的。

class Student : Person {
    constructor(name : String , age : Int) : super(name,age){
    }
}

首先,Student类后面没有显示的定义 主构造函数 ,同时又因为定义了 次构造函数 ,所以现在的Student是没有主构造函数的。那么既然没有主构造函数,继承 Person 类的时候也就不需要再加上括号了。由于没有主构造函数,次构造函数也只能调用父类的构造函数了,调用父类构造函数与Java相同,使用 super 关键字。这里就不再多说了。

如果喜欢这个系列的话,不妨点个关注吧!感谢您的观看!

参考:

? ? ? ? 《第一行代码 Android (第三版)》 ? ---郭霖

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-02-07 13:50:15  更:2022-02-07 13:51:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 14:46:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码