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


    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后面什么类型,动态类型就是什么类型)

    示例如下:

  • 相关阅读:
    eureka注册中心搭建
    MySQL基本查询语句
    通过IP地址和子网掩码与运算计算相关地址
    Linux bash 快捷键列表【转】
    Linux 系统简介【转】
    Linux Vim -d 比较两个文件
    无连接和面向连接协议的区别【转】
    ARP报文详解
    Linux 指定网卡 ping
    Linux Windows Java 快速生成指定大小的空文件
  • 原文地址:https://www.cnblogs.com/xs-yqz/p/13366814.html
Copyright © 2020-2023  润新知