美文网首页
Java知识点-基础篇-面向对象

Java知识点-基础篇-面向对象

作者: 爱做梦的锤子 | 来源:发表于2020-05-23 22:11 被阅读0次

    面向对象

    什么是面向对象

    面向对象与面向过程

    • 面向过程

      • 自顶而下的编程模式:将一个问题分解成一个一个步骤,每个步骤使用函数实现,再依次调用这些函数,解决这个问题
    • 面向对象

      • 将事务高度抽象化的变成模式:将一个问题分解成一个一个步骤,对每个步骤进行相应的抽象,形成对象,通过不同对象之间的调用,组合解决问题

    三大特征

    • 封装

      • 把客观事物封装成抽象的类,类可以让自己的成员被自己信任的其他类或者对象操作,对于自己不信任的可以将自己的成员信息进行隐藏
    • 继承

      • 继承是指一种可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展的能力(实现继承和接口继承)
    • 多态

      • 一个类的实例的相同方法,在不同场景下有不同的表现形式

    五大基本原则

    • 单一职责原则

      • 一个类最好只做一件事,只有一个引起他的变化原因(高内聚,低耦合)
    • 开放封闭原则

      • 软件实体是可扩展而不可修改的(对扩展开发,对修改封闭)
    • Liskov替换原则(里氏替换原则)

      • 子类必须能替换(代替)其父类。子类可以扩展父类的功能,但不能改变其功能
    • 依赖倒置原则

      • 依赖抽象。上层模块不应该依赖底层模块,它们都应该依赖于抽象;抽象不依赖于具体,具体依赖于抽象
    • 接口隔离原则

      • 使用多个专门的接口比使用单一的总的接口要好

    封装、继承、多态

    什么是多态

    • 同一操作,作用于不同对象,可以有不同的解释,产生不同的操作结果(运行期状态)

    • 多态的三个条件

      • 有类继承或接口实现
      • 子类重写或实现父类方法
      • 父类的引用指向子类

    方法重写与重载

    • 重载

      • 方法名字相同,方法参数列表不同

        • 参数个数
        • 参数类型
        • 多个不同类型参数的顺序。eg:(int String)和(String int)
      • 编译期绑定

    • 重写

      • 在继承关系中,子类拥有和父类中方法名相同,参数相同的方法的情况

        • 方法名相同
        • 参数列表相同
        • 返回值相同
        • 重写方法的访问限制级别不能比被重写方法强。eg:父-protected,子-protected或者public
        • 重写方法不能抛出比被重写方法更加广泛的异常
      • 运行期绑定

    Java的继承与实现

    • 继承

      • 如果多个类的某个部分的功能相同,则可以将共同部分抽象出来成一个父类,这多个类共同继承这个父类
    • 实现

      • 如果多个类的处理目标相同,但是处理方式不同,则定义一个接口标准,让他们都实现这个接口标准,各自使用各自的方式达成相同的目标

    Java的继承于组合

    • 两种方式的目的都是提高代码的复用性(第三种提高代码复用性的是代理)

    • 继承

      • 联结类于类的层次模型,子类可以扩展父类的功能,子类和父类是 is-a 的关系

        • 编译期确定关性,白盒式代码复用,子类需在编写代码时指明其继承的父类
        • 子类自动继承父类接口,创建子类实例时,无需创建父类实例
    • 组合

      • 整体与部分的关系(拥有的关性),组合的类之间是 has-a 关性

        • 运行期确定关性,黑盒试复用,面向接口编程中,只有运行时才能确定调用的是哪一个具体实现
        • 松耦合,动态组合,较好的扩展性
    • 当确认类之间的关系真的是一个is-a时,再选择使用继承

    构造方法与默认构造方法

    • 构造方法

      • 一种特殊的方法,主要用来创建实例时,对实例进行初始化,支持重载,不会被继承(不能被重写)
    • 默认构造方法

      • 在一个可实例化的类中,没有专门编写一个构造方法时,多数编程语言会使用一个缺省构造器,这个构造器一般情况会将值类型赋值为默认值在,将引用类型赋值为null(Java为例)

    类变量,成员变量与局部变量

    • 类变量

      • 存放方法区(类中静态变量)
    • 成员变量

      • 存放堆内存
    • 局部变量

      • 存放栈内存

    成员变量和方法的作用域

    • 修饰方式:private,protected,public,不写

      • private:私有的。只有当前类对private修饰的成员变量和方法具有访问权限
      • protected:受保护的。当前类,同一包下其他类以及其子类对protected修饰的成员变量和方法具有访问权限
      • public:公开的。所以类和对象可见,对其具有访问权限
      • 不写:默认权限。当前类以及同一包下的其他类,对其具有访问权限

    平台无关性

    如何实现平台无关性

    • 平台无关性

      • 一种语言在计算机上运行不受平台的约束,一次编译,到处运行。
    • 实现

      • 语言规范,class文件,jvm

        • 通过规定Java语言中基本数据类型的取值范围和行为
        • 所有Java文件要编译成统一的class文件
        • jvm将class文件转换成对应平台的二进制文件
      • .java->.class为前端编译(javac),.class->0-1机器码为后端编译(jvm)

    jvm支持的其他语言

    • Kotlin
    • Groovy
    • Scala
    • Jruby
    • Jython

    值传递

    值传递与引用传递

    • 形参和实参

      • 形参:定义函数名和函数体时所使用的参数,接收调用该函数时传入的实际参数
      • 实参:在调用有参函数时,调用函数传递给被调函数的实际参数
    • 值传递与引用传递

      • 值传递:在调用函数时,将当前参数复制一份传递给被调函数,被调函数对该复制出来的数据进行修改,不会影响调用函数中的数据
      • 引用传递:在调用函数时,直接将参数的地址传递给被调函数,此时被调函数对该地址所指向内存的数据进行修改,会影响调用函数的数据

    Java只有值传递

    • 了解即可。传递对象是传递的引用地址,并不是真实的一个内存地址,这个引用地址,可以看作是一个值类型

    关注公众号【爱做梦的锤子】后台回复【java知识点】可下载我整理的完整版思维导图

    相关文章

      网友评论

          本文标题:Java知识点-基础篇-面向对象

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