5. Java 面向对象

Java 面向对象

1. 什么是面向对象

  • Java 的核心思想就是:OOP

1.1 面向过程 与 面向对象

  • 面向过程

    步骤清晰简单,按步骤执行

  • 面向对象

    物以类聚,分类的思维模式。面对问题先分类,再单一思考,对最后的细节进行面向过程的思索

    适合处理复杂的事物

  • 宏观上,通过面向对象的思路分析;微观上,通过面向过程的思路出路

面向过程和面向对象的区别

  • 面向过程:性能优于面向对象。
  • 面向对象:易维护、易扩展、易复用

面向过程性能比面向对象高?

  • 由于Java是半编译语言,最终的执行代码不是CPU可执行的二进制机器码。
  • 而面向过程的语言大多数是直接编译成机器码来执行,但是有一些脚本语言性能也不一定比Java好。

1.2 什么是面向对象

  • 面向对象编程:OOP (Object-Oriented Programming)
  • 面向对象的本质:以类的方式组织代码,以对象的形式封装数据。
  • 抽象
  • 三大特性
    • 封装
    • 继承
    • 多态
  • 从认识的角度先有对象 后有 类。类是抽象的,是对对象的抽象
  • 从代码的角度是先有类再有对象

1.3 方法

  • 静态方法与类一起加载的,非静态方法对象实例化之后才加载。因此静态方法可直接通过类调用。

2. 创建对象

  • 使用 new 关键字创建对象
  • 创建对象时除了分配内存空间外,还会给 创建好的对象 进行默认的初始化以及对类中的构造器的调用
  • 类中的构造器也称为构造方法,是创建对象时 必须要调用的。
  • 构造方法的特点
    1. 必须与类的名字相同
    2. 必须没有返回值类型,也不能写 void
    3. 构造函数分为:无参构造和有参构造
  • 构造函数的作用
    1. new 本质再调用构造函数
    2. 初始化对象的值

2.1 小结

  • 类与对象

    类是抽象的,对象是实例化的对象

    类的属性

    1. 静态的属性:
    2. 动态的行为:方法
  • 对象的引用:对象是通过引用来操作的:栈--->堆

  • 对象的创建和使用

    1. 必须使用 new 关键字,构造器
    2. 对象的属性

3. 三大特性

  • 程序设计追求 高内聚,低耦合
    • 高内聚:类的内部数据操作细节自己完成,不允许外部干涉
    • 低耦合:仅暴露少量的方法给外部使用

3.1 封装

  • (数据的隐藏)通常,应禁止直接访问一个对象中数据的实际表示,而应通过接口来访问

  • 属性私有:get / set

  • 封装的作用

    • 提高了代码的安全性
    • 隐藏了代码的实现细节
    • 统一接口
    • 可维护性提高了

3.2 继承

  • 继承的本质是某一批类的抽象,从而实现更好的建模
  • extends ; 子类是父类的扩展
  • Java 只可以单继承
  • 所有的类都直接或者间接继承 Object

关键点:

  • super 注意点

    1. super 调用父类的构造方法,必须在构造方法的第一个
    2. super 必须只能出现在子类的方法或者构造方法中
    3. super 和 this 不能同时调用构造方法
  • this

    • 代表的对象不同
      • this 本身调用者这个对象
      • super 代表父类对象的应用
    • 前提
      • this 没有继承也可使用
      • super 只能在继承条件才可使用
    • 构造方法
      • this 本类的构造方法
      • super 父类的构造方法

3.3 多态

  • 父类的引用指向子类的实例 Person person = new Student();
  • 即同一个方法可以根据发送对象的不同而采用多种不同的行为方式
  • 一个对象的类型是确定的,但是可以指向对应的引用类型有很多
  • 多态是 方法 的多态,属性没有多态
  • 父类与子类 有联系
  • 多态存在的条件
    1. 存在继承关系
    2. 方法必须重写
    3. 父类的引用指向子类对象
  • new 左边是引用类型,右边是实际类型。而对象能使用的方法看引用类型

instanceof

  • 判断两个类之间是否存在父子关系

static

  • 类加载时就被加载,且只加载一次

4. 修饰符

  • public:公有的
  • protected:受保护的
  • private:私有的
  • static:静态
  • final:修饰常量
  • abstract:抽象

在一个静态方法中,调用一个非静态成员为什么是非法的?

  • 因为静态方法随着类加载就已经初始化完成了,而非静态成员需在对象实例化之后才完成初始化,所以没法调。

静态方法 和 实例方法的不同

  • 静态方法 可以以 类名.方法名 调用,而实例方法不可以,必须实例化之后
  • 静态方法随着类加载就已经初始化完成了

4.1 常用关键字:

  • static
  • final
  • this
  • super

5. 抽象类

  • Java 的类是单继承的,接口是可以多继承的
  • 抽象类不能new, 只能靠子类去实现。约束
  • 抽象类可以写普通方法,抽象方法必须存在抽象类中

6. 接口

  • 定义:interface
  • 接口都需要有实现类
  • 接口的作用:
    1. 约束
    2. 定义一些方法让不同的人实现
    3. 方法都是 public abstract
    4. 常量都是 public static final
    5. 接口不能被实例化,因为接口中没有构造方法

接口和抽象类的区别

  • 接口的方法默认是public, 抽象类中可以有public, protected, default 这些。(不能有private , 抽象类的方法就是为了要被重写)
  • 接口中的方法不能有实现(jdk8 可以有默认实现),抽象类可以有非抽象的方法
  • 一个类可以有多个接口,但只能实现一个抽象类。

7. 内部类

  • 局部内部类
  • 静态内部类:方法外面,类里面
  • 13匿名内部类:方法里面
原文地址:https://www.cnblogs.com/blackBlog/p/13451212.html