类与对象

作者: 码农修行之路 | 来源:发表于2020-11-20 19:59 被阅读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) {

    }

}
  • 如果一个非抽象类没有声明任何主、次构造函数 它会有一个生成的不带参数的主构造函数 构造函数的可见性是public 如果你不想一个类有默认的公共的构造函数 那么你需要声明一个非默认可见的空的主构造函数
class Human private constructor() {
}
  • 在JVM中 如果主构造函数的所有的参数都有默认值,编译器会生成 一个额外的无参构造函数,它将使用默认值

相关文章

  • 类与对象(类与对象定义)

    类与对象的定义和使用 如果在程序之中要定义一个类可以使用class关键字完成,而定义的语法如下: 在这个类中只是定...

  • 函数类和对象区别

    类与类:行为不同 对象与对象:数据不同

  • python入门开发学习笔记之类与对象

    本节重点 掌握什么是类、什么是对象 掌握如何定义及使用类与对象 了解对类与对象之间的关系 类与对象的概念 类即类别...

  • 类对象与类的对象

    类对象(obj.getClass)描述的是类的代码信息,比如哪些属性、属性是什么类型、变量名是什么、哪些方法、方法...

  • python-高级、面向对象

    一、类与对象 二、类和对象

  • Java面向对象笔记

    类和对象 对象的概念 什么是面向对象 类 什么是对象的属性 什么是对象的方法 类与对象的关系/与区别 什么是对象 ...

  • 006-面向对象1

    面向过程与面向对象 开车问题 吃饭问题 做饭问题 类与对象 类的概念 对象的概念 练习: 区分类与对象 类的组成 ...

  • 三、元类对象的本质

    1. 元类对象结构。 与类对象的结构一样。 与类对象比较 2. 元类对象的获取。 通过object_getClas...

  • 格物致知iOS类与对象

    格物致知iOS类与对象 格物致知iOS类与对象

  • 类与对象

    类与对象是整个面向对象之中最为基础的组成单元;类是共性的集合,对象是个性的产物。所有的类都是用来描述出对象的结构,...

网友评论

    本文标题:类与对象

    本文链接:https://www.haomeiwen.com/subject/mfrjiktx.html