Kotlin

类与对象

2020-11-20  本文已影响0人  码农修行之路

面向对象

      面向对象,相信大家都不陌生,我想着不在此啰嗦呢!但是考虑到有些小白师弟,我们文章本着也是从零开始的态度,我再此也简单概括一下:
      介绍之前,我们先来了解一下面向过程,对喽!看字面意思就很容易理解,过程就是一件事物处理的步骤,这些完整的步骤就是一个过程,也就是分析和解决问题所需要的步骤,通过函数把这些步骤一一实现,使用的时候依次调用就ok!(牵一发而动全身)
      面向对象:把待解决的问题按照一定的规划划分为多个独立的对象,通过多个对象的相互配合来实现应用程序的功能(部分、局部改动)
      每个独立的对象承载着不同分工任务 也就是说 某一需求的变动,需要一个甚至个别几个对象的改动,从而代码更易于维护

封装:面向对象的核心思想 将对象的属性和行为封装起来,不需要让外部知道具体的实现细节,只知道怎样使用就好(不要在意细节,当然码农还是要有追溯源头,刨根问底勇气)
    1.对细节部分的包装、隐藏
    2.防止该类的代码和数据被外部类定义的代码随机访问
    3.要访问该类的代码和数据,必须通过指定的接口进行访问控制
继承:主要描述类与类之间的关系,通过继承可以在不修改原有类的前提下,对原有类功能进行扩展(增强代码的复用性,为程序的修改补充提供便利)
    1.类是单继承 但是可以多重继承 接口可以多实现
    2.子类拥有父类的非私有属性和方法 重写父类的方法 对父类进行扩展
    3.继承的缺点就是耦合度高
    4.关键字:extends implements
多态:程序中允许出现重名现象,在一个类中定义的属性和方法被其它类继承后,它们可以有不同的数据类型或表现行为(相同的属性名或方法名,在不同的对象中,所表现的行为是不一样的)
    1.直白的说,同一个接口,不同实例使用执行不同操作
    2.多态存在的三个必要的条件 继承、重写、父类引用指向子类的对象
    3.实现方式 重写、接口
简单的举个例子:

fun main(args: Array<String>) {
    show(Cat())
    show(Dog())

    // 向上转型
    val a: Animals = Cat()
    a.eat()
    // 向下转型
    val c:Cat = a as Cat;
    c.work()
}

fun show(a: Animals) {
    a.eat()
    if (a is Cat) {
        a.work()
    } else if (a is Dog) {
        a.work()
    }
}

open class Animals {
    open fun eat() {
        println("父类吃")
    }
}

class Cat : Animals() {
    override fun eat() {
        println("小猫吃")
        //super.eat()// 父类吃
    }

    fun work() {
        println("小猫工作")
    }
}

class Dog : Animals() {
    override fun eat() {
        println("小狗吃")
        //super.eat()// 父类吃
    }

    fun work() {
        println("小狗工作")
    }
}

类的创建 相信也都不陌生 关键字class修饰

class Animals{
}
// 如果没有类体可以省略花括号
class Car

主构、次构函数

// 如果构造函数中有注解或可见性修饰符 这个constructor关键字是必须的,并且这些修饰符在它前面
class Human1 public @Inject constructor() {
    constructor(human2: Human2) {

    }
}

class Human2 constructor(name: String, age: Int) {
    // 主构造
    var name: String? = null
    var age: Int? = null

    // 静态代码块 优先初始化
    init {
        this.name = name
        this.age = age
    }

    // 次构造 必须委托主构造
    constructor(name: String, age: Int, sex: String) : this(name, age) {

    }
    // 或者通过其它次构造函数间接委托
    constructor(name: String, age: Int, sex: String, className: String) : this(name, age, sex) {

    }

}
class Human private constructor() {
}
上一篇下一篇

猜你喜欢

热点阅读