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

1.面向对象的三大特性

1)封装(Encapsulation)

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

2)继承(Inheritance)

使用已经存在的类作为基础类(父类),在此基础上建立新类(子类), 
子类既可复用父类的功能,也能进行扩展,从而实现代码复用。 
另外,Java不能像C++那样同时继承多个父类,只能树形的继承, 
比如:Man -> Human -> Animal,或通过接口和内部类实现多继承。

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

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

3)多态(Polymorphism)

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

分为以下两种:

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

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

示例如下:

class Animal() { fun show() { println("动物") }}
class PeopleAnimal() { fun show() { println("人类") }}
//下述代码打印结果:人类
Animal animal = new People()
animal.show()
  • 1
  • 2
  • 3
  • 4
  • 5

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) 
    尽量使用组合/聚合的方式,而不是使用继承


你可能感兴趣的:(java,笔记记录,后台开发)