面向对象的三大特性、七大原则、类与类间的关系

1.面向对象的三大特性

1)封装(Encapsulation)

  隐藏对象的具体实现细节,通过共有方法暴露对象的功能。 
  内部结构可以自由修改,同时可对成员进行更加精确的控制 
  (比如在setter方法中加值合法判断)

2)继承(Inheritance)

  使用已经存在的类作为基础类(父类),在此基础上建立新类(子类),子类既可复用父类的功能,也能进行扩展,从而实现代码复用。 

  另外,Java不能像C++那样同时继承多个父类,只能树形的继承, 
  比如:Man -> Human -> Animal,或通过接口和内部类实现多继承。

另外,关于继承还需注意以下几点:

  • 1.子类拥有父类非private的属性与方法
  • 2.构造方法只能调用,不能实现,子类默认调用父类的无参构造方法, 
    如果父类没有无参的构造方法,需要使用super显式调用!
  • 3.慎用继承,要考虑是否需要从子类向父类进行向上转型!

3)多态(Polymorphism)

  定义:一个类实例的相同方法在不同的情形下有不同的表现形式

  分为以下两种:

  • 编译时多态(OverLoading)—— 方法重载
  • 运行时多态(OverRidding)—— 继承 + 方法重写 + 向上转型(父类引用指向子类对象)

运行时多态(动态绑定,new后面什么类型,动态类型就是什么类型)

示例如下:

 

 

 2.类与类间的关系

口诀:鸡湿衣冠剧组(继承,实现,依赖,关联,聚合,组合)

继承和实现就不说了,后面四个只是 语意层次 的区别 
两个类的相关程度,依赖 < 关联 < 聚合 < 组合

依次的UML类图标记:

· 继承/泛化(Generalization): 子类父类

· 实现(Realization):实现类 接口

· 依赖(Dependency):不持有引用,具体表现:局部变量,函数参数, 
返回值使用 依赖类,比如大佬依赖于递茶小弟;

 

关联(Association):持有引用,具体表现:成员变量, 
箭头指向被关联类,可双向,一对多或多对多: 

 

 

聚合(Aggregation):成员变量,关联是处于同一层次的,而聚合则 
是整体和局部层次的,比如:社团 和 小弟,另外即使没有了社团, 
小弟们依旧可以到别的地方搞事情。 

 

 

 

 

组合(Composition):与聚合类似,程度更加强烈,共生死,组合类 
负责被组合类的生命周期,比如: 社团 和 大佬,如果没了社团, 
大佬也就就不能存在了。 

 

 

 

 

 3.面向对象七大原则

· 单一职责原则(Single Responsibility Principle) 
每一个类应该专注于做一件事情。 即:高内聚,低耦合。

· 开闭原则(Open Close Principle) 
一个对象对扩展开放,对修改关闭。即:对类的改动 
是通过增加代码进行的,而不是修改现有代码。

· 里氏替换原则(Liskov Substitution Principle) 
在任何父类出现的地方都可以用它的子类来替代。

· 依赖倒置原则(Dependence Inversion Principle) 
要依赖于抽象,不要依赖于具体实现。

· 接口隔离原则(Interface Segregation Principle) 
应当为客户端提供尽可能小的单独的接口,而不是提供大的总的接口。

· 迪米特原则(Law Of Demeter) 
一个对象应当尽量少地与其他对象之间发生相互作用,使得系统功能模块相对独立。

· 组合/聚合复用原则(Composite/Aggregate Reuse Principle) 
尽量使用组合/聚合的方式,而不是使用继承。

 

运行时多态(动态绑定,new后面什么类型,动态类型就是什么类型)

示例如下:

posted @ 2020-07-23 15:58  小军的代码库  阅读(677)  评论(0编辑  收藏  举报