面向对象的特征(三个或四个)
- 封装 为保护数据
隐藏对象的属性和实现细节
仅对外提供公共访问方式 - 继承 为减少代码冗余
继承时多态的前提 提高代码的复用性 - 抽象 实现代码的重构
- 多态 重载(构造方法) 重写(父类方法 子类扩展)
父类或接口定义的引用变量可以指向子类或具体实现类的实例对象
提高程序的扩展性
方法重载
- overload
- 实现java中多态的机制之一
- 在同一个类中 实现方法名相同 形参列表不同 与返回值无关
- 形参列表的不同体现在参数个数 参数类型 参数个数的不同上
eg.
封装
- 为将设计者和使用者分离 java采用了封装机制
- 封装的是数据 目的是保护了数据 用户只能看到数据而不能直接操作数据
- 属性和方法皆可封装 通过使用private修饰符修饰
属性的封装 所有成员变量约定进行封装
方法的封装 被封装的方法只能内部调用 - 当用户想要访问被封装的数据时 设计者需要提供接口
有三种方式可以访问到被封装的数据
1、 构造方法
2、普通方法
3、setter/getter
setter/getter
- setter/getter 就是java中被声明为私有的变量的访问接口 即set和get方法
setter/getter和构造方法的区别
- 使用构造方法 可以在创建对象的同时进行属性初始化 较为方便 但当属性较多时 可能需要创建多个构造方法 耦合度较高
- setter/getter虽然没有构造方法方便 但是好在可以自由进行组合
继承
- java面向对象编程的基石 允许创建分等级层次的类
- 子类继承父类的所有方法和属性 包括私有属性 只是私有属性不能直接访问
- java只能实现单继承 但可以实现间接继承
- 一个类如果没有继承另一个类 则这个类继承了Object类 Object类是所有类的始祖类
eg
抽象类
- 被抽取出的类 抽取子类共有的属性和方法 子类可以扩展自己的属性和方法
- 类被abstract修饰
- 抽象类不能被直接实例化 只能通过子类实例化
eg.
里氏代换原则
- 当一个地方需要父类对象时 使用子类代替
- 子类只能重写父类的非实例方法 (实例方法可以重写 但约定不重写)
测试
多态
多态 实际上是一种声明 多种体现形式
分类
-
编译时多态:方法重载
一个类内 同一个方法名多次实现 -
运行时多态:方法重写
一个父类 多个子类继承 每个子类实现与父类方法名相同的方法
多态运行的前提 -
必须有继承
-
必须有重写
-
必须有父类的声明指向子类的引用