定义:开就是对扩展是开放的;对修改是关闭的。具体而言;当要对一个功能进行添加时;可以在原有的基础上添加一个类;但不允许去修改原有的类。
举例说明:定义一个Person类 ;里面有一个Driver()的方法;传入一个Car的参数;然后调用Car。move方法
- public class Person{
-
- public void drive(Car car) {
- car.move();
- }
- }
-
- public class Car {
- puboic void move() {
- system.out.println(" 小汽车移动 ");
- }
- }
如果现在我们要开的是一个Mpv呢?修改代码如下:
- public class Person{
-
- public void drive(Mpv mpv) {
- mpv.move();
- }
- }
-
- public class Car {
- puboic void move() {
- system.out.println(" 小汽车移动 ");
- }
- }
-
- public class Mpv {
- puboic void move() {
- system.out.println(" mpv移动 ");
- }
- }
这样子的话我们是不是修改了类里的方法参数;当然你也可以重载一个drive()方法。如果我们面向接口编程会是什么样子呢?
- public class Person{
-
- public void drive(Vehicle vehicle) {
- vehicle.move();
- }
- }
-
- public interface Vehicle {
- public void move();
- }
-
- public class Car implements Vehicle{
- public void move() {
- system.out.println(" 小汽车移动 ");
- }
- }
-
- public class Mpv implements Vehicle{
- puboic void move() {
- system.out.println(" mpv移动 ");
- }
此处如果要添加一个MPV;则第一种方式为修改参数Car 为Mpv(对修改原有类为关闭的);但第二种将其抽象为交通工具后;只需要添加一个Mpv的类;然后传入对应的参数即可(对扩展是开放的);
总结 :用抽象构建框架,用实现扩展细节