Skip to content
Able Blog
Home
Others
  • Home
      • 学习笔记
          • Android
            • 简历_赵思琦_Android_5年经验
                • Kotlin
                    • HandFirstKotlin程序设计
                      • 01. 快速入门
                        • 02. 基本类型和变量:关于变量
                          • 03. 函数
                            • 04. 类和对象
                              • 05. 子类和父类
                                • 06. 抽象和接口
                                  • 1. 抽象类
                                    • 2. 接口
                                      • 3. 抽象类/接口的思考总结
                                        • 4. 类,子类,抽象类,接口的创建规则
                                        • 07. 数据类
                                          • 08. 空值和异常
                                            • 09. 集合
                                              • 10. 泛型
                                                • 11. Lambda和高阶函数
                                                  • 12. 内置高阶函数
                                                    • 12. 协程

                                              06. 抽象和接口

                                              author iconAblecalendar icon2022年5月10日category icon
                                              • Kotlin
                                              tag icon
                                              • 抽象
                                              • 接口
                                              • 学习笔记
                                              word icon约 700 字

                                              此页内容
                                              • 1. 抽象类
                                              • 2. 接口
                                              • 3. 抽象类/接口的思考总结
                                              • 4. 类,子类,抽象类,接口的创建规则

                                              # 06. 抽象和接口

                                              # 1. 抽象类

                                              抽象类的含义就是我们无法具体描述一个类的属性与行为,只是大致知道他会做什么。

                                              我们知道动物,但是不知道动物应该叫什么,动物的当前年龄,动物时如何叫的。犬科的动物又是如何嚎叫的。

                                              但是我们可以准确的知道一匹狼或是一只狗是怎么叫的,在使用时,我只需要让动物叫,而无需关心他是什么动物。

                                              abstract class Animal {
                                                  open val name: String = ""
                                                  abstract val age: Int
                                                  abstract val make: String
                                                  abstract fun makeNoise()
                                              }
                                              
                                              abstract class Canine : Animal() {
                                              }
                                              
                                              class Wolf : Canine() {
                                                  override var name = "一匹北方的狼"
                                                  override var age: Int = 18
                                                  override val make: String="嗷呜呜呜"
                                              
                                                  override fun makeNoise() {
                                                      println(name + "发出了--独属于自己的帅气的" + make + "的叫声")
                                                      println("并且")
                                                      println(make + "又叫了一次")
                                                      println(name + age + "岁了")
                                                  }
                                              }
                                              
                                              class Dog : Canine() {
                                                  override var name = "一只拆家的哈士奇"
                                                  override var age: Int = 2
                                                  override val make: String="汪汪汪呜呜呜"
                                              
                                                  override fun makeNoise() {
                                                      println(name + "干了错事,只会" + make + "的狗叫")
                                              
                                                  }
                                              }
                                              
                                              fun makeNoise(animal: Animal){
                                                  println(animal.makeNoise())
                                              }
                                              
                                              fun main(args: Array<String>) {
                                                  val wolf: Animal = Wolf()
                                                  val dog:Animal=Dog()
                                                  makeNoise(wolf)
                                                  makeNoise(dog)
                                              
                                              }
                                              
                                              
                                              1
                                              2
                                              3
                                              4
                                              5
                                              6
                                              7
                                              8
                                              9
                                              10
                                              11
                                              12
                                              13
                                              14
                                              15
                                              16
                                              17
                                              18
                                              19
                                              20
                                              21
                                              22
                                              23
                                              24
                                              25
                                              26
                                              27
                                              28
                                              29
                                              30
                                              31
                                              32
                                              33
                                              34
                                              35
                                              36
                                              37
                                              38
                                              39
                                              40
                                              41
                                              42
                                              43
                                              44
                                              45
                                              46

                                              # 2. 接口

                                              接口是一个类的附加功能,在需要增加某种能力时,或是我需要某写类有共同的能力,这时使用接口。

                                              举个例子,动物的子类马,马又可以作为交通工具,作为交通工具就是他的一种能力。 汽车也是交通工具,但是汽车绝不是动物.

                                              所以,交通工具是一种附加能力,可以作为接口赋予马或者骆驼。

                                              如下所示:

                                              只是作为动物时,马无法被作为交通工具驾驶。 作为交通工具时,他也不再拥有动物的能力。

                                              //交通工具
                                              interface Transportation{
                                                  fun move()
                                              }
                                              //动物
                                              abstract class Animal {
                                              
                                              }
                                              //马
                                              class Horse:Animal(),Transportation{
                                                  override fun move() {
                                                      println("被人骑着跑")
                                                  }
                                              
                                              }
                                              //汽车
                                               class Car:Transportation {
                                                  override fun move() {
                                                      println("发动机驱动行驶")
                                                  }
                                              }
                                              
                                              
                                              fun main(args: Array<String>) {
                                              
                                                  val horse:Animal=Horse()
                                                  if (horse is Transportation){
                                                      val horseMount:Transportation=horse
                                                      horseMount.move()
                                                  }
                                              }
                                              
                                              1
                                              2
                                              3
                                              4
                                              5
                                              6
                                              7
                                              8
                                              9
                                              10
                                              11
                                              12
                                              13
                                              14
                                              15
                                              16
                                              17
                                              18
                                              19
                                              20
                                              21
                                              22
                                              23
                                              24
                                              25
                                              26
                                              27
                                              28
                                              29
                                              30
                                              31

                                              # 3. 抽象类/接口的思考总结

                                              抽象类是模板,他拥有基础的能力,但是又无法完全自我描述。 他需要子类去完善它,让他变得完整。

                                              接口是一种附加能力,或是需要一些类有公共行为。

                                              # 4. 类,子类,抽象类,接口的创建规则

                                              1. 通过IS-A测试才可以创建子类。

                                              2. 如果需要某个类更具体的版本,并且覆盖或增加新的行为,那么创建一个子类。

                                              3. 需要为子类定义一个模板,确保无法创建该类的对象,使用抽象类。

                                              4. 定义共同的行为,或是需要某个类有额外的功能,使用接口。

                                              edit icon编辑此页open in new window
                                              上次编辑于: 2022/5/10 23:55:55
                                              贡献者: zsqan
                                              上一页
                                              05. 子类和父类
                                              下一页
                                              07. 数据类
                                              默认页脚
                                              Copyright © 2022 Able