1. 面向对象概述
c 语言是面向过程的,面向过程就是把一件事按步骤一步一步来实现
而 java、c++ 等是面向对象的,面向对象就是把现实问题抽象为对象,通过调用每个对象的属性或方法去解决问题
面向对象思想主要由以下三个部分组成:
(1)OOA 面向对象分析:按照面向对象的思想来分析业务,对需求中描述的问题,进行模块化的处理
(2)OOD 面向对象设计:是个中间过渡,对 OOA 分析的结果进一步规范化,以便能被 OOP 直接接受
(3)OOP 面向对象程序:把构成问题的各个事务分解成各个对象
2. 类与对象
2.1 类
类决定了某一类对象的外观和行为,由属性和方法组成,创建关键字 class
构造方法与类同名,不含返回值也不用 void ,作用是对类初始化,一个类可以有多个构造方法,一旦显式定义后,系统就不再提供默认的构造方法
方法重载:方法名称相同,参数类型或长度不同
- 构造方法重载在不同的创建对象的需求下,调用不同的方法来完成对象的初始化
- 普通方法也能重载
2.2 对象
类是对象的抽象,对象是类的实例,一个类可以创建多个对象,创建关键字 new
new 出来的对象是存放在堆中的,栈存放的是对象的引用(即对象在堆中的地址)
栈:位于 RAM 中,创建程序时 java 必须要知道栈内所有项的生命周期,以便上下移动指针
堆:通常是内存池,创建对象时不用关心堆内存中需要开辟多少存储空间,也不用关注内存占用时长,有很大的灵活性
关于回收内存问题:
栈:当栈内存不存在对象的引用时,则被视为垃圾,由 GC 垃圾回收器自动回收
堆:需要手动回收
匿名对象:没有对象名称的对象
匿名对象只能使用一次,因为没有任何的对象引用,所以被称为垃圾,等待 GC 回收
3. 三大特征
3.1 封装
封装是将类的属性 或 方法隐藏起来,通过权限访问修饰符(public、protected、default、private)进行限制,总的来说,封装是一种信息隐藏技术
封装属性:可以将属性私有化,用 private 修饰;可以提供 getter、setter 方法来供外部访问
封装方法:对外隐藏内部的实现细节,只暴露必要的接口供外部访问
public:对所有类可见
protected:对同一包内的类 和 所有子类可见
default 默认:在同一包内可见
private:在同一类内可见
3.2 继承
继承 extend:允许一个类继承另一个类的属性和方法,通过继承,子类可以重用父类的代码,并在此基础上,添加新的属性和方法,从而实现代码的重用和扩展
this 表示当前方法调用者的地址值;super 代表父类存储空间
java 不支持多继承,子类只能继承一个父类,可以使用接口来实现多继承
抽象类是对类的抽象;接口是行为的抽象,是抽象方法的集合
参数 | 抽象类 abstract | 接口 interface |
---|---|---|
实现 | 子类继承 extends 抽象类,如果子类不是抽象类的话,它要重写抽象类的所有抽象方法 | 子类 implements 实现接口,实现接口中所有声明的方法 |
构造器 | 可以有 | 不能有 |
访问修饰符 | 抽象类中的方法可以是任意访问修饰符 | 接口方法默认修饰符是public,不允许定义为 private 或者 protected |
多继承 | 一个类最多只能继承一个抽象类 | 一个类可以实现多个接口 |
3.3 多态
多态:允许不同的类通过同样的接口来表现不同的行为,多态性使得可以在运行时才确定要执行的具体方法,而不是在编译时确定
使用多态的前提条件:
(1)子类继承父类
(2)子类对父类的方法进行重写
(3)父类引用执行子类对象
父类类型 对象名称 = 子类对象;
Animal myCat = Cat();