Java课程复习之面向对象(中)
一、面向对象的特征
- 封装
- 继承
- 多态
二、封装
1.封装
- 通过访问控制实现,信息隐藏
- 访问权限控制符
public 公共访问权限
protected 包访问权限、继承访问权限
无访问控制符修饰 包访问权限
private 类内部访问权限
权限从小到大:private->无访问控制符->protected->public - 修饰符可用于:修饰类、修饰类的属性成员、修饰类的成员方法
- protected属性具有包访问权限,可以被同一包中的所有类访问
- 不能通过对象引用来访问不在同一包的类的protected属性和方法
- 子类的类定义中可以访问父类的protected属性和方法,不论是否在同一包
- 访问权限首先看类前的修饰符,再看属性和方法前的修饰符
2.消息
- 面向对象程序 = 对象 + 消息
- 消息的实质是引用向对象发出的服务请求,是对数据成员方法的调用。
- 引用必须引用了特定的对象,否则会在运行时抛出NullPointerException异常
- 对象必须定义了相应的属性和方法
- 被访问的属性或方法必须具有可访问的权限
3.类的组合
- 类的复用方式之一,优先于继承
三、继承
1.继承
- 通过
extends
关键字实现 - 子类继承了父类的所有属性和方法,但只有public、protected的属性和方法在子类中是可见的
- 子类可以直接访问父类的protected属性和方法
- 子类不能直接访问父类的private属性和方法,可以调用父类的公共方法来间接访问私有属性
2.Object类
- Object类是所有类的共同祖先
- Object类中定义的方法都可以被所有的子类继承
- Object类方法
方法名 说明 Class getClass() 获得当前对象的类对象 String toString() 得到代表这个对象的字符串 Object clone() 将当前对象克隆,默认是浅拷贝 void finalize() 对象被释放时使用,已弃用 int hashCode() 得到代表对象的一个整数,这个整数在应用程序运行时保持不变 Boolen equals(Object obj) 判断两个引用是否指向同一对象,其参数不能为普通数据类型 void notify 用于线程同步中唤醒等待的线程 void wait() 应用于线程同步中的线程等待
四、多态
1.定义
- 多态是指一个程序中同名的不同方法共存的情况
- Java提供两种多态的机制:重载和覆写
2.重载
- 方法名称相同,参数类型或个数不同
- 编译器视角:方法签名=方法名称+参数类型+参数个数 组成成唯一键
- 同一个类中通常提供多个重载方法
3.覆写
- 子类对父类的同名方法(方法名称相同,参数相同,返回类型相同)重新进行定义,即在子类中定义与父类中已定义的同名而内容不同的方法。
- 覆写与重载的区别:
覆写:方法名称相同,参数类型、个数一致,子类返回类型可向上转型到父类返回类型 (类族)
重载:方法名称相同,参数类型或个数不同 (同一个类) - 覆写需要满足的条件
- 子类的访问修饰符权限应等于或大于父类,不能变小
- 子类的返回类型能够向上转型成为父类的返回类型
- 异常也要能向上转型为父类的异常
- 方法名、参数类型及个数必须严格一致
- 覆写只能针对非静态、非final、非构造方法