Java的核心思想就是 OOP(面向对象编程)
初始面向对象
面向过程 & 面向对象
-
面向过程思想(线性思维)
-
面向对象思想(分类思维)
-
对于描述复杂的事物,为了从宏观上把握、从整体上合理分析,我们需要使用面向对象的思路来分析整个系统,但是,具体到微观操作,任然需要面向过程的思路去处理
属性 + 方法 = 类
什么是面向对象
三大特征: 封装、继承、多态
方法回顾和加深
方法的定义
修饰符 返回值类型 方法名(方法的参数){
//方法体
return 返回值; //返回值和返回类型一一对应
}
方法的调用:递归
用静态方法调用非静态方法会报错:已经存在的调用不存在的报错
对象的创建分析
类跟对象的关系
创建和初始化对象
-
使用 new 关键字创建对象
-
使用 new 关键字创建的时候,除了分配内存空间之外,还会给 创建好的对象 进行默认的初始化以及对类中构造器的调用
-
类中的构造器也成为构造方法,是在进行创建对象的时候必须要调用的,并且构造器以下两个特点
构造器的作用:
总结
类与对象
- 类是一个模板,抽象
- 对象是一个具体的实例
方法
- 定义、调用
对象的引用
- 引用类型 八大基本类型
- 对象是通过引用来操作的:栈 -----→ 堆(地址)
属性:字段 Field 成员变量
- 默认初始化
- 数子: 0 0.0
- char: u000
- boolean: false
- 引用:null
修饰符 属性类型 属性名 = 属性值 赋值公式
对象的创建和使用
-
必须使用 new 关键字创建对象,构造器 例如: Person person = new Person();
-
对象的属性 person.name
-
对象的方法 person.sleep()
面向对象三大特征
封装
封装的核心 private 私有
提供一些可以操作这个属性的方法 public 的 get/set 方法
属性私有,get/set
继承
-
继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模
-
extends 的意思是 “扩展”,子类是父类的扩展
-
、JAVA 中只有单继承,没有多继承
-
继承是类和类之间的一种关系,除此之外,类和类之间的关系还有依赖、组合、聚合等
-
继承关系的俩个类,一个为子类(派生类),一个为父类(基类)子类继承父类,使用关键字 extends 来表示
-
子类继承父类就会拥有父类的全部方法,私有的东西无法被继承
-
调用父类的构造器必须在子类的第一行
-
object 类
-
super
对比 this 关键字
-
方法重写
- 重写是方法的重写,和属性无关
- @Override 重写 有功能的注释
- 重写跟静态方法无关,只跟非静态方法有关 (静态方法加载类就直接执行了)
重写的前提:
- 需要有继承关系,子类重写父类的方法
- 方法名:必须相同
- 参数列表:必须相同
- 修饰符:范围可以扩大 public → Protected → Default → private
- 抛出的异常:可以被缩小,但不能扩大
重写:子类和父类必须要一致,方法体不同!
为什么需要重写?
多态
-
动态编译:类型:可扩展性
-
即同一方法可以根据发送对象的不同而采用多种不同的行为方式
-
一个对象的实际类型是确定的,但可以指向对象的引用的类型有很多
多态存在的条件
- 有继承关系
- 子类重写父类方法
- 父类引用指向子类对象
注意:
-
多态是方法的多态,属性没有多态性
-
父类和子类,有联系 父子类存在问题: 类型转换异常 ClassCastException
-
存在条件:继承关系,方法需要被重写,父类的引用指向子类对象
不能被重写的方法
instanceof 类型转换(引用类型)
判断一个对象是什么类型
抽象类和接口
抽象类
-
abstract 修饰符可以用来修饰方法也可以用来修饰类,如果修饰方法,那么该方法就是抽象方法,如果修饰类,那么该类就是抽象类
-
抽象类可以没有抽象方法,但是有抽象方法的类一定要声明为抽象类
-
抽象类,不能使用 new 关键字来创建对象,它是用来让子类继承的
-
抽象方法,只有方法的声明,没有方法的实现,它是用来让子类实现的
-
子类继承抽象类,那么就必须要实现抽象类没有实现的抽象方法,否则该子类也要声明为抽象类
extends 单继承 in 接口可以多继承
抽象类的特点:
抽象的抽象:约束
接口
普通类:只有具体实现
抽象类:具体实现和规范(抽象方法)都有!
接口:只有规范!无法自己写方法~专业的约束! 约束和实现分离:面向接口编程~
声明类的关键字是 calss,声明接口的关键字是 interface
-
接口就是规范,定义的是一组规则,体现了现实世界中 “如果你是…则必须能…” 的思想
-
接口的本质是契约,就像我们人间的法律一样,制定好后大家都遵守
-
面向对象(OO)的精髓,是对对象的抽象,最能体现这一点的就是接口
接口中所有定义的方法都是抽象的 public abstract
接口中定义的所有属性是一个常量 public static final
接口都需要有实现类 一般实现类用 Impl来结尾 implements 就是实现
类通过 implements关键字 来实现接口 实现了接口中的类必须要实现接口中的方法
接口的作用
-
约束
-
定义一些方法,让不同的人实现
-
public abstract 方法
-
public static final 属性
-
接口不能被实例化,接口中没有构造方法
-
implements 可以实现多个接口
-
必须要重写接口中的方法
内部类及OOP实战
内部类