Java 面向对象
1. 什么是面向对象
- Java 的核心思想就是:OOP
1.1 面向过程 与 面向对象
- 面向过程
步骤清晰简单,按步骤执行 - 面向对象
物以类聚,分类的思维模式。面对问题先分类,再单一思考,对最后的细节进行面向过程的思索
适合处理复杂的事物 - 宏观上,通过面向对象的思路分析;微观上,通过面向过程的思路出路
面向过程和面向对象的区别
- 面向过程:性能优于面向对象。
- 面向对象:易维护、易扩展、易复用
面向过程性能比面向对象高?
- 由于Java是半编译语言,最终的执行代码不是CPU可执行的二进制机器码。
- 而面向过程的语言大多数是直接编译成机器码来执行,但是有一些脚本语言性能也不一定比Java好。
1.2 什么是面向对象
- 面向对象编程:OOP (Object-Oriented Programming)
- 面向对象的本质:以类的方式组织代码,以对象的形式封装数据。
- 抽象
- 三大特性
- 封装
- 继承
- 多态
- 从认识的角度先有对象 后有 类。类是抽象的,是对对象的抽象
- 从代码的角度是先有类再有对象
1.3 方法
- 静态方法与类一起加载的,非静态方法对象实例化之后才加载。因此静态方法可直接通过类调用。
2. 创建对象
- 使用 new 关键字创建对象
- 创建对象时除了分配内存空间外,还会给 创建好的对象 进行默认的初始化以及对类中的构造器的调用
- 类中的构造器也称为构造方法,是创建对象时 必须要调用的。
- 构造方法的特点
- 必须与类的名字相同
- 必须没有返回值类型,也不能写 void
- 构造函数分为:无参构造和有参构造
- 构造函数的作用
- new 本质再调用构造函数
- 初始化对象的值
2.1 小结
- 类与对象
类是抽象的,对象是实例化的对象
类的属性
- 静态的属性:
- 动态的行为:方法
- 对象的引用:对象是通过引用来操作的:栈--->堆
- 对象的创建和使用
- 必须使用 new 关键字,构造器
- 对象的属性
3. 三大特性
- 程序设计追求 高内聚,低耦合
- 高内聚:类的内部数据操作细节自己完成,不允许外部干涉
- 低耦合:仅暴露少量的方法给外部使用
3.1 封装
- (数据的隐藏)通常,应禁止直接访问一个对象中数据的实际表示,而应通过接口来访问
- 属性私有:get / set
- 封装的作用
- 提高了代码的安全性
- 隐藏了代码的实现细节
- 统一接口
- 可维护性提高了
3.2 继承
- 继承的本质是某一批类的抽象,从而实现更好的建模
- extends ; 子类是父类的扩展
- Java 只可以单继承
- 所有的类都直接或者间接继承 Object
关键点:
- super 注意点
- super 调用父类的构造方法,必须在构造方法的第一个
- super 必须只能出现在子类的方法或者构造方法中
- super 和 this 不能同时调用构造方法
- this
- 代表的对象不同
- this 本身调用者这个对象
- super 代表父类对象的应用
- 前提
- this 没有继承也可使用
- super 只能在继承条件才可使用
- 构造方法
- this 本类的构造方法
- super 父类的构造方法
3.3 多态
- 父类的引用指向子类的实例
Person person = new Student();
- 即同一个方法可以根据发送对象的不同而采用多种不同的行为方式
- 一个对象的类型是确定的,但是可以指向对应的引用类型有很多
- 多态是 方法 的多态,属性没有多态
- 父类与子类 有联系
- 多态存在的条件
- 存在继承关系
- 方法必须重写
- 父类的引用指向子类对象
- new 左边是引用类型,右边是实际类型。而对象能使用的方法看引用类型
instanceof
- 判断两个类之间是否存在父子关系
static
- 类加载时就被加载,且只加载一次
4. 修饰符
- public:公有的
- protected:受保护的
- private:私有的
- static:静态
- final:修饰常量
- abstract:抽象
在一个静态方法中,调用一个非静态成员为什么是非法的?
- 因为静态方法随着类加载就已经初始化完成了,而非静态成员需在对象实例化之后才完成初始化,所以没法调。
静态方法 和 实例方法的不同
- 静态方法 可以以 类名.方法名 调用,而实例方法不可以,必须实例化之后
- 静态方法随着类加载就已经初始化完成了
4.1 常用关键字:
- static
- final
- this
- super
5. 抽象类
- Java 的类是单继承的,接口是可以多继承的
- 抽象类不能new, 只能靠子类去实现。约束
- 抽象类可以写普通方法,抽象方法必须存在抽象类中
6. 接口
- 定义:interface
- 接口都需要有实现类
- 接口的作用:
- 约束
- 定义一些方法让不同的人实现
- 方法都是 public abstract
- 常量都是 public static final
- 接口不能被实例化,因为接口中没有构造方法
接口和抽象类的区别
- 接口的方法默认是public, 抽象类中可以有public, protected, default 这些。(不能有private , 抽象类的方法就是为了要被重写)
- 接口中的方法不能有实现(jdk8 可以有默认实现),抽象类可以有非抽象的方法
- 一个类可以有多个接口,但只能实现一个抽象类。
7. 内部类
- 局部内部类
- 静态内部类:方法外面,类里面
- 13匿名内部类:方法里面