Kotlin基本知识:类-继承-接口..ST

抓住今天,尽可能少的信赖明天。 喝汤能补 (* ^ ▽ ^ *)

前言

  该文章作为学习交流,如有错误欢迎各位大佬指正 (* ^ ▽ ^ *)

  • 自身技能
    (1)已具备计算机的基本知识
  • 本文简介
    主要讲解:类的语法,继承语法,接口语法。文中代码采用最基础的逻辑和语法形式,后续讲述kotlin简洁的语法糖。

类与对象

  是对事物的一种封装,比如书本,可以将书本的名称,价格,出版社等的信息都写在类这个文件中。
  通过这种类的封装,我们可以在需要的时候创建出该类的对象,然后通过对象调用对象中的字段(属性)和函数(行为)来实现各种逻辑。

  简单点理解就是:对于某一事物(书),我们要了解其全面的属性(书名,价格)和行为信息(购买,出售,租借),就必须从上网、询问朋友以及商店等方式一步一步获取到信息。 如果有一个箱子,将这个事物的属性和行为信息都放在里面,那么我们只需要在这个箱子中拿到相应的信息即可。
  这个箱子就是类,将该事物的属性和行为放入到箱子的过程,就是封装。因此箱子非常重要,不能谁都可以拿到;需要使用的时候,可以通过原始箱子建立一个虚拟的箱子,我们再使用这个虚拟的箱子去拿到信息,这个虚拟的箱子就是创建的对象。

  总结下:先将事物封装成具体的类,然后将事物所拥有的属性和行为分别定义成字段和函数,然后对类进行实例化,最后在需要的时候调用类中的字段和方法。

  • 语法
    类的关键字:class
    实例化一个类(也称创建对象):  类名()

java中需要使用都new

示例代码

class Book {
    var name = ""
    var price = 0.0
    fun buy(){
        println( name + " need " + price +"¥" )
    }
}

fun main(){
      val b = Book()
      b.name = " 自律 "
      b.price = 100.5
      b.buy()
}

继承

  继承,面向对象编程的特性之一。比如我们定义一个动物类Animal,然后再定义一个它的子类bird。在父类Animal我们定义属性(name,age)和行为(eat) , 对于子类来说,同样具有该属性和行为,如果重复定义就比较冗余,所以通过Bird 继承 Animal的方式,让Bird同样具备这些属性和行为。

  • 在kotlin中,任何非抽象类默认都是不可以被继承的, 在关键字class前面加上open关键字 主动告诉编译器这个类时为继承而设计的。
  • 对于子类,在继承时,使用的是 : 符号
    (java使用的是 extends )

示例代码
关于继承时,是否需要增加()的问题,可以看下构造函数讲解。

open class Animal {
    var name = ""
    var age = 0
    fun eat() {
        println(name + " age is " + age)
    }
}

class Bird : Animal(){
    var appearance = "翅膀"
    fun fry(){
        println(" flight ")
    }
}

接口

  接口是用于实现多态编程的重要组成部分。kotlin中,也是允许实现任意多个接口的。
  接口中定义的函数,一般不会进行实现,全部交给实现该接口的类去完成。 kotlin中,允许对接口中定义的函数进行默认实现( java1.8也支持了)。对于有默认实现的函数,在类去实现接口时,不会强制要求实现,被调用时若未实现则使用默认的实现逻辑。

  • 语法 使用 : 符号实现接口。实现多个接口中间使用 ,符号进行分隔。
  • 使用 override关键字表示重写父类或者实现接口中的函数。

示例代码
  在使用时,可以将Bird的函数传给sound()函数,然后调用接口中的方法。这种设计就是面向接口编程。

interface AnimalSound {
    fun sound()
}

// Animal(name,age) 类 是在继承知识点中定义的示例类
class Bird(val appearance : String ,name: String, age : Int) : Animal(name,age),AnimalSound{
    override fun sound() {
    
    }
}



fun main() {
    val bird = Bird("翅膀","cui",4)
    sound(bird)
}

fun sound(sound: AnimalSound) {
    sound.sound()
}

接口中属性

  在Java中,接口中的成员变量都是常量,也就是默认的修饰符是public static final类型的,并必须初始化.
  在Kotlin中,接口中可以包含抽象属性声明,即:接口只需要定义属性,但是属性不能被初始化,需要交给子类初始化,子类如果不进行初始化, 那么将变成抽象类。

interface IA{
    val name: String

}

// 初始化方式一
class A(override val name: String) : IA

// 初始化方式二
class A: IA{
       override val name: String
         get() = "张三"
      
}

  给接口中的属性赋值方式
  1.使用了主构造方法并且使用val关键字为该实现类声明了一个属性name,即:将初始化该实现类对象的属性赋值给了name属性,且val声明的属性默认提供了获取值的方法。
  2.在类内部重写的方式,且提供get方法。
强制要求: override关键字表示重写了接口的name属性。

接口与抽象类异同

异点

  1. 接口是将一些独立的功能、模块、能力,定义为一个一个的接口。比如“可点击的”、“可触摸的”、“可滑动的”、“可吃的”。
    接口是抽象功能,抽象类是抽象类别。
  2. 接口可以看做是抽象类的延申,接口的抽象级别更高
  3. 抽象类只能被单继承,接口可以多实现。
  4. 抽象类被子类继承,接口被类实现。
  5. 方法被 abstract 修饰,一定是抽象类。

同点

  1. 抽象类和接口都不能被实例化。
  2. 抽象类和接口中都可以有方法声明和方法实现。
  3. 抽象类和接口中的变量都不能初始化。
  4. 子类没有实现完抽象类中的抽象方法,接口实现类没有实现完接口中没有方法体的接口方法,都将变为抽象类。
  5. 接口中、抽象类中的方法,都不能是私有(private)的。

觉得有帮助的点下赞哟,毕竟三连步骤更多,嘻嘻,谢谢大家的支持(* ^ ▽ ^ *)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值