【翻译】Java 面向对象编程基本概念

原文地址:Java OOPs Concepts
        面向对象的理念包含了四个主要原则:抽象(abstraction)、封装(encapsulation)、继承(inheritance)和多态(polymorphism),这也是众所周知的面向对象理念的四个支柱。抽象是暴露实体本质,而忽略一些无关细节的过程,以此来降低使用的复杂程度。封装是在一个实体中绑定数据和操作的过程。继承是从已有的类型衍生出一个新的类型,进而建立父类-子类关系。多态让一个实体在不同的上下文环境上呈现不同的状态。
下面详细介绍上述四个面向对象的四个主要原则。

一、 抽象(Abstraction)

我们用现实世界中的场景来举例说明,抽象就变得很容易理解。例如:当我们去驾驶我们的汽车,我们不用关心汽车内部是如何工作的。我们需要关系的仅仅是汽车与我们交互的部分,如:方向盘、刹车踏板、油门踏板等。这些就是我们对汽车的抽象。
        在计算机科学中,抽象就是用语义的形式描述数据和程序,隐藏其实现细节。简单地说,抽象就是通过在真实世界中类似的东西间进行比较,来隐藏不相关的信息。

 抽象仅包含当前视角下类型的相关信息

常见的抽象有如下两种形式
1.数据抽象
        数据抽象是将多个细分的数据类型整合成一个复杂的数据类型。通常情况下,这个复合数据类型与现实世界的实体更为接近。如:一个Employee类型可以是一个拥有多个细分信息的复合数据类型。

public class Employee {private Department department;private Address address;private Education education;//so on...
}

因此,如果我们想获取一个Employee的信息,我们只需要从Employee获取,正如我们在现实生活中一样。
2.操作抽象
        操作抽象是通过内部的方法访问为一个复杂任务隐藏其内部的一系列动作。因此,任务的具体逻辑对使用者来说是隐藏的,并且可以在不影响使用者代码的情况对内部逻辑进行调整。

public class EmployeeManager{public Address getPrefferedAddress(Employee e){//Get all address from database//Apply logic to determine which address is preferred//Return address.}
}

在上述的例子,如果后续我们需要调整方法逻辑让方法一直返回国内的地址,我们可以调整getPrefferedAddress()方法的实现逻辑,且使用者的代码不受影响。
        更多信息,参见:Understanding abstraction in Java

二、封装(Encapsulation)

将数据和方法包装至一个类型中,并通过访问控制隐藏相关的实现逻辑通常叫做封装。封装的结果是一个类型既包含了属性与包含了行为。封装的本质是实现了信息和实现的隐藏。

"Whatever changes,encapsulate it" -- A famous design principle

信息隐藏常通过使用访问控制关键字来实现(如:public,private,protected),实现隐藏常通过创建类型的接口实现。通过信息隐藏可以让设计人员在需求发生变更时自由地修改提供信息的实现逻辑。
信息隐藏,示例:

class InformationHiding{//Restrict direct access to inward dataprivate List items = new ArrayList();//provide a way to access data - internal logic can safely be changed in futurepublic List getItems(){//do something needed here...return items;}
}

实现隐藏,示例:

interface ImplemenatationHiding{Integer sumAllItems(List items);
}
class InformationHiding implements ImplemenatationHiding{//Restrict direct access to inward dataprivate List items = new ArrayList();//provide a way to access data - internal logic can safely be changed in futurepublic List getItems(){//do something needed here...return items;}public Integer sumAllItems(List items){//Here you may do N number of things in any sequence//Which you do not want your clients to know//You can change the sequence or even whole logic//without affecting the client}
}

更多信息,参见:Encapsulation in Java

三、继承(Inheritance)

在Java中,继承是一个对象获取其父类对象属性和行为的一种机制,其本质是在类型之间建立父-子关系。在Java中,我们经常使用继承来实现代码的复用以及提升其可维护性。
        Java使用关键字extends来实现对类的继承。extends关键字表明我们从一个已有的类衍生出一个新的类型。Java使用超类(super class)术语来表示被继承的类,新的类称为子类(subclass)
        子类继承父类所有的非私有成员(属性、方法以及嵌套类)。构造函数不是类的成员,因此,构造函数不会被子类继承,但子类的构造函数可以触发父类的构造函数。
示例

public class Employee {private Department department;private Address address;private Education education;//so on...
}class Manager extends Employee{private List<Employee> reportees;
}

四、多态(Polymorphism)

多态指的是我们创建的函数或引用的对象在不同的运行上下文中表现出不同的行为状态。
在Java中,从本质上来看,多态存在两个不同的类型:
+ 编译时多态(静态的绑定或方法重载)
+ 运行时多态(动态的绑定或方法重写)
        更多信息,参见:Java面向对象编程基本概念——多态

【翻译】Java 面向对象编程基本概念相关推荐

  1. 孙卫琴:我为什么要写《Java面向对象编程》

    孙卫琴:我为什么要写<Java面向对象编程> 特约作者:孙卫琴 策划 & 设计 & 制作:李大微 当<精通Struts>和<精通Hibernate> ...

  2. Java面向对象编程篇5——枚举

    Java面向对象编程篇5--枚举 1.枚举的概念 在日常生活中这些事物的取值只有明确的几个固定值,此时描述这些事 物的所有值都可以一一列举出来,而这个列举出来的类型就叫做枚举类型 2.枚举的定义 使用 ...

  3. Java面向对象编程篇4——内部类

    Java面向对象编程篇4--内部类 1.内部类的概念 当一个类的定义出现在另外一个类的类体中时,那么这个类叫做内部类 (Inner),而这个内部类所在的类叫做外部类(Outer). 类中的内容:成员变 ...

  4. Java面向对象编程篇2——面向对象三大特点

    Java面向对象编程篇2--面向对象三大特点 1.封装 1.1.封装的概念 通常情况下可以在测试类给成员变量赋值一些合法但不合理的数值,无 论是编译阶段还是运行阶段都不会报错或者给出提示,此时与现实生 ...

  5. Java面向对象编程篇1——类与对象

    Java面向对象编程篇1--类与对象 1.面向过程 1.1.概念 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了 1.2.优缺点 优点:性 ...

  6. 八、Java面向对象编程(类、对象、方法、重载、可变参数、作用域、构造器、this本质)

    文章目录 Java面向对象编程(类.对象.方法.重载.可变参数.作用域.构造器.this本质) 一.类与对象 1. 类与对象的引出 2. 使用现有技术解决 3. 现有技术解决的缺点分析 4. 类与对象 ...

  7. java面向对象编程基础

    java面向对象编程基础 前言:什么是java 是咖啡飘香的清晨 - 是斯坦福校园意浓情深 - 是James的思想睿智 是剁手党双十一挥舞的利刃 是大数据云计算驰骋的平台 - 是ATM上吐出的钞票 - ...

  8. Java 面向对象编程 考试监考安排系统

    Java 面向对象编程考试监考安排系统是一种用于安排考试监考人员的软件系统.它可以帮助考试管理人员组织和安排监考人员的任务,确保考试过程的顺利进行. 该系统可以通过使用 Java 面向对象编程技术来实 ...

  9. 5.Java面向对象编程

    文章目录 05 Java面向对象编程 1. 面向过程与面向对象比较 2. 类和对象 2.1 对象的属性和方法 2.2 类的属性和方法 2.3 定义一个类 2.4 创建和使用对象 2.5 对象和类的总结 ...

  10. 能听懂的Java面向对象编程-雷伟-专题视频课程

    能听懂的Java面向对象编程-2605人已学习 课程介绍         通过本课程的学习,学生能掌握面向对象的程序设计思想,并能运用Java技术和相关开发工具进行计算机软件代码的设计. 课程内容并非 ...

最新文章

  1. 为什么自动化对于IT工程师是必须的?
  2. 定义__asm块作为C宏
  3. AC自动机的使用案例
  4. 云开发平台开箱,3分钟零基础搭建个人Hexo博客
  5. MySQL 高级repeat循环
  6. java 设置头错误信息,错误:在node.js中发送标头后无法设置标头
  7. 相机标定(1)内\外参矩阵和畸变矩阵
  8. postman socket接口测试_基于postman测试接口(整套接口测试)
  9. gcc 安装在服务器的问题总结
  10. LocalDateTime时间加减法
  11. 商务邮箱有哪些?常见邮箱对比
  12. 2022年春招牛客网最热门的Java岗面试八股文汇总
  13. CTF WEB WP杂谈
  14. cpu倍频模式怎么调_BIOS:增加倍频比率调整选项
  15. pythonallowpos_基于Python的诗和远方
  16. IC芯片验证 - 手把手教你搭建UVM验证环境
  17. Linux基础、vim、find命令等
  18. layui 表格内容写temple函数_templet渲染layui表格数据的三种方式
  19. 程序员不得不学的操作系统知识(三)
  20. 西安知名IT互联网公司—为自己回西安做铺垫

热门文章

  1. IPLOOK 5G核心网重磅升级!网络切片切出5G“大蛋糕”
  2. WordPress优化攻略:全面提升WP网站速度仅需3个加速方法和1个插件
  3. exe图标修改器和EXE文件打不开了的办法
  4. 百度地图点聚合,加载1万个marker
  5. linux下封装命令,linux系统怎么封装
  6. matlab矩阵倒数,求解:用MATLAB生成空间距离倒数矩阵后面板分析出现下面的几句警告...
  7. ESP8266+WIFI继电器初识
  8. c语言城市交通灯优化,城市智能交通灯系统(本科)毕业论文.doc
  9. 希尔伯特变换分析及应用
  10. 【开源】EasyDarwin编译全过程:Linux系统下编译运行最新版EasyDarwin的步骤介绍