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

面向对象

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

什么是面向对象

面向对象与面向过程

  • 面向过程

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

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

三大特征

  • 封装

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

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

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

五大基本原则

  • 单一职责原则

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

    • 软件实体是可扩展而不可修改的(对扩展开发,对修改封闭)
  • 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知识点】可下载我整理的完整版思维导图

猜你喜欢

转载自blog.csdn.net/telundusiji/article/details/106307037
今日推荐