面向对象
面向对象和面向过程
面向对象:
把属性和行为封装成对象,基于对象和对象的能力进行组合解决业务问题
特点:易维护,易复用,低耦合,易扩展
面向过程:
每个步骤通过函数实现,然后依次调用;
特点:相对于面向对象新能较高;
封装
- 隐藏对象的属性和实现细节,仅对外提交接口,控制程序中属性的修改和读取的访问级别
继承
实现方式
- 实现继承(直接复用父类的属性和方法)
- 接口继承(子类需要实现父类方法)
多态
一种形式的多种表现形态
实现多态需要满足的三个条件:
1.实现继承关系;
2.子类重写父类方法;
3.父类引用指向子类对象;
重写
- 需要通过继承关系来实现(如果一个方法不能被继承,则它不能被重写);
- 参数列表必须相同;
- 访问级别必须必被重写的方法低;
- 重写方法能够抛出更有限的异常;
- 不能重写被final修饰的方法;
重载
1.被重载的方法必须改变参数列表;
2.被重载的方法可以改变返回类型;
3.被重载的方法可以改变访问修饰符;
4.被重载的方法可以声明新的或更广的检查异常;
5.方法能够在同一个类中或在一个子类中被重载;
重写vs重载
- 重载对于编译期概念,重写对应运行期概念;
- 重载是“编译期绑定”,即在调用方法时根据入参类型可以确定调用的方法;
- 重写时“运行期概念”,即需要等到程序运行时,调用父类引用指向的方法;
- 由上面三条可知,重仔不是多态,重写时多态;
面向对象五大基本原则
1.开发封闭原则:对扩展开发,对修改关闭;
2.替换原则:子类必须可以替换父类;
3.单一职责原则:一个类做好只做一件事,只有一个引起他变化的原因;
4.依赖倒置原则:具体依赖于抽象,抽象不依赖具体,高层模块不依赖于底层模块,依赖于抽象
5.接口隔离原则:使用多个小的专门的接口,而不用大的接口(分散开来)
继承与实现
继承:如果多个类有共同的部分,则抽离出公共的部分,放入到父类中,让其他的类都来继承该父类[复用]
实现:如果多个类处理的目标一致,但是各种的实现方式不同,则定义一个接口,也就是一个标准,让其他类都来继承,然后各种实现完成目标的方法;[定义标准]
继承:
- extend
- 一个类只能继承一个父类
- 可以定义方法,变量,常量
实现: - implement;
- 一个类可以实现多个接口;
- 接口中只能定义常量和未实现的方法(java8以后可以定义默认方法defult)
继承和组合
组合关系 | 继承关系 |
---|---|
优点:不破坏封装,整体和局部低耦合 | 缺点:破坏封装,子类和父类之间,子类依赖父类 |
优点:具有较好的可扩展性 | 、、、 |
优点:支持动态组合,整体对象可以选择不同的局部对象进行组合 | 、、、 |
优点:整体类可以对局部类进行包装, 封装局部类的接口,提供新的接口 | 缺点:子类不能改变父类的接口 |
整体类不能自动获得和局部类同 样的接口 | 优点:子类能自动继承父类的接口 |
缺点:创建整体类的对象时,需要创建 所有局部类的对象 | 优点:创建子类的对象时,无须创 建父类的对象 |