面向对象的三大基本特征:封装、继承和多态

一、封装

利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体。数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系。用户无需知道对象内部的细节,但可以通过对象对外提供的接口来访问该对象。

优点:

  • 减少耦合:可以独立地开发、测试、优化、使用、理解和修改
  • 减轻维护的负担:可以更容易被程序员理解,并且在调试的时候可以不影响其他模块
  • 有效地调节性能:可以通过剖析确定哪些模块影响了系统的性能
  • 提高软件的可重用性
  • 降低了构建大型系统的风险:即使整个系统不可用,但是这些独立的模块却有可能是可用的

以下 Person 类封装 name、gender、age 等属性,外界只能通过 get() 方法获取一个 Person 对象的 name 属性和 gender 属性,而无法获取 age 属性,但是 age 属性可以供 work() 方法使用。

注意到 gender 属性使用 int 数据类型进行存储,封装使得用户注意不到这种实现细节。并且在需要修改 gender 属性使用的数据类型时,也可以在不影响客户端代码的情况下进行。

public class Person {private String name;private int gender;private int age;public String getName() {return name;}public String getGender() {return gender == 0 ? "man" : "woman";}public void work() {if (18 <= age && age <= 50) {System.out.println(name + " is working very hard!");} else {System.out.println(name + " can't work any more!");}}
}

二、继承

继承实现了 IS-A 关系,例如 Cat 和 Animal 就是一种 IS-A 关系,因此 Cat 可以继承自 Animal,从而获得 Animal 非 private 的属性和方法。

Cat 可以当做 Animal 来使用,也就是说可以使用 Animal 引用 Cat 对象。父类引用指向子类对象称为 向上转型 。

Animal animal = new Cat();

继承应该遵循里氏替换原则,子类对象必须能够替换掉所有父类对象。

三、多态

多态分为编译时多态和运行时多态。编译时多态主要指方法的重载,运行时多态指程序中定义的对象引用所指向的具体类型在运行期间才确定。

运行时多态有三个条件:

  • 继承
  • 覆盖(重写)
  • 向上转型

下面的代码中,乐器类(Instrument)有两个子类:Wind 和 Percussion,它们都覆盖了父类的 play() 方法,并且在 main() 方法中使用父类 Instrument 来引用 Wind 和 Percussion 对象。在 Instrument 引用调用 play() 方法时,会执行实际引用对象所在类的 play() 方法,而不是 Instrument 类的方法。

public class Instrument {public void play() {System.out.println("Instument is playing...");}
}public class Wind extends Instrument {public void play() {System.out.println("Wind is playing...");}
}public class Percussion extends Instrument {public void play() {System.out.println("Percussion is playing...");}
}public class Music {public static void main(String[] args) {List<Instrument> instruments = new ArrayList<>();instruments.add(new Wind());instruments.add(new Percussion());for(Instrument instrument : instruments) {instrument.play();}}
}

面向对象——三大基本特征相关推荐

  1. 面向对象三大基本特征及五大基本原则介绍

    目录 前言 一.面向过程和面向对象区别 二.面向对象的三大基本特征:封装.继承.多态 1.封装 2.继承 3.多态 三.面向对象的五大基本原则 1.单一职责原则(SRP) 2.开放封闭原则(OCP) ...

  2. c++局部对象是什么_面向对象三大特征: 封装

    今日内容 面向对象概述 类和对象的关系 面向对象内存图 private.this关键字和封装 面向对象之构造方法 面向对象三大特征 封装 继承 多态 01. 面向过程和面向对象思想概述 什么是面向过程 ...

  3. 面向对象第七章,内存的管理,面向对象三大特征封装、继承、多态

    ###1.内存管理:由JVM来管理的------了解 1)堆: 1.1)存储new出来的对象(包括实例变量) 1.2)垃圾:没有任何引用指向的对象 垃圾回收器(GC)不定时到内存中清扫垃圾, 回收过程 ...

  4. c++面向对象三大特征封装、继承和多态知识总结

    面向对象三大特征:封装,继承,多态: 一.封装:该公开的就公开话,该私有的就隐藏掉,主要是由public,private实现:作用是便于分工和分模块,防止不必要的扩展: 二.继承:就是一种传承,可以把 ...

  5. 什么是面向过程?什么是面向对象?面向对象的三大基本特征是什么?

    一.什么是面向过程? 面向过程是一种以过程为中心的编程思想,其原理就是将问题分解成一个一个详细的步骤,然后通过函数实现每一个步骤,并依次调用. 面向过程我们所关心的是解决一个问题的步骤,举个例子,汽车 ...

  6. Java面向对象三大特征---继承

    系列文章目录 Java面向对象三大特征-多态 Java面向对象三大特征-封装 文章目录 系列文章目录 前言 一.概念 二.举例说明 三.语句格式 三.为何要使用继承 四.super与this关键字 五 ...

  7. 面向对象的三大基本特征和六大基本原则

    面向对象三大特征: (1)封装(Encapsulation) 所谓封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏.封装是面向对象的特 ...

  8. Java面向对象知识详解——三大基本特征

    文章目录 前言 什么是面向过程? 什么是面向对象? 三大基本特征 封装 继承 多态 Java中的多态 最后 前言 相信很多程序员在最初接触Java的时候就听过,Java中一切皆对象那么什么是面向对象呢 ...

  9. 面向对象的三大基本特征、五大基本原则

    一.三大基本特征 1.封装 封装就是隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别,将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的 ...

最新文章

  1. Windows搭建以太坊的私有链环境
  2. python 之socket 网络编程
  3. Canvas scale- 缩放
  4. 工业机器人打磨抛光编程员工资_让我们一起来谈谈,工业机器人行业的真实工资是多少?...
  5. Oracle GoldenGate 详解
  6. python fabric上传文件夹_通过python的fabric包完成代码上传部署(简单版)
  7. 【vivado使用】第2篇:超实用的vivado使用教程
  8. ❤️Docker中只需2步即可拥有Oracle 10G环境,史上最快部署❤️
  9. 单片机毕设选题 - stm32心率脉搏血压体征监测手表(嵌入式 物联网)
  10. java webp图片转换为png或jpg
  11. 尝一尝HBuilderX香不香
  12. 23种设计模式(15):备忘录模式
  13. 预约订座APP系统(基于uni-app框架)毕业设计毕业论文开题报告参考(3)系统后台管理功能
  14. Box2dの碰撞筛选[Ispooky]
  15. 洛谷 P1719 最大加权矩形 (前缀和,动态规划)
  16. QT---之Q_D和d指针概念2
  17. ByVal 和ByRef区别
  18. VC++实现文件关联
  19. 木瓜得了肿瘤病,是缺硼了,看看如何治疗
  20. 基于51单片机3轴加速度计ADXL345计步器卡路里系统设计

热门文章

  1. vue获取dom元素与修改样式详解
  2. mysql的各种语句_MySQL 常用语句大全
  3. 笔记本电脑触摸板和无线鼠标不能同时使用
  4. 浅析 JavaScript 沙箱
  5. java新建项目流程,记录vue创建项目过程
  6. GJB 软件开发计划(模板)
  7. Windows10下的超详细Java安装步骤
  8. java安装步骤_win10系统安装java的详细步骤(图文)
  9. govendor包管理工具
  10. c语言的反斜杠用法,正斜杠和反斜杠-windows、web、c语言大讨论