原标题:Java新职篇:面向对象编程的3个原则是什么?

所有面向对象的编程语言都提供帮助你实现面向对象模型的机制,这些机制是封装,继承及多态性。现在让我们来看一下它们的概念。

封装

封装(Encapsulation)是将代码及其处理的数据绑定在一起的一种编程机制,该机制保证了程序和数据都不受外部干扰且不被误用。理解封装性的一个方法就是把它想成一个黑匣子,它可以阻止在外部定义的代码随意访问内部代码和数据。对黑匣子内代码和数据的访问通过一个适当定义的接口严格控制。如果想与现实生活中的某个事物作对比,可考虑汽车上的自动传送。自动传送中包含了有关引擎的数百比特的信息,例如你正在以什么样的加速度前进,你行驶路面的坡度如何,以及目前的档位。作为用户,你影响这个复杂封装的方法仅有一个:移动档位传动杆。例如,你不能通过使用拐弯信号或挡风玻璃擦拭器影响传动。所以档位传动杆是把你和传动连接起来的惟一接口。此外,传动对象内的任何操作都不会影响到外部对象,例如,档位传动装置不会打开车前灯!因为自动传动被封装起来了,所以任何一家汽车制造商都可以选择一种适合自己的方式来实现它。然而,从司机的观点来看,它们的用途都是一样的。与此相同的观点能被用于编程。封装代码的好处是每个人都知道怎么访问它,但却不必考虑它的内部实现细节,也不必害怕使用不当会带来负面影响。

Java封装的基本单元是类。尽管类将在以后章节详细介绍。现在仍有必要对它作一下简单的讨论。一个类(class)定义了将被一个对象集共享的结构和行为(数据和代码)。

一个给定类的每个对象都包含这个类定义的行为和结构,好像它们是从同一个类的模子中铸造出来似的。因为这个原因,对象有时被看作是类的实例(instances of a class)。所以,类是一种逻辑结构,而对象是真正存在的物理实体。

当创建一个类时,你要指定组成那个类的代码和数据。从总体上讲,这些元素都被称为该类的成员(members)。具体地说,类定义的数据称为成员变量(member variables)或实例变量(instance variables)。操作数据的代码称为成员方(member methods)或简称方法(methods)。如果你对C/C++熟悉,可以这样理解:Java程序员所称的方法,就是C/C++程序员所称的函数(function)。在完全用Java编写的程序中,方法定义如何使用成员变量。这意味着一个类的行为和接口是通过方法来定义的,类这些方法对它的实例数据进行操作。

既然类的目的是封装复杂性,在类的内部就应该有隐藏实现复杂性机制。类中的每个方法或变量都可以被标记为私有(private)或公共(public)。类的公共接口代表类的外部用户需要知道或可以知道的每件事情;私有方法和数据仅能被一个类的成员代码所访问,其他任何不是类的成员的代码都不能访问私有的方法或变量。既然类的私有成员仅能被程序中的其他部分通过该类的公共方法访问,那么你就能保证不希望发生的事情就一定不会发生。当然,公共接口应该小心仔细设计,不要过多暴露类的内部内容

![在这里插入图片描述](https://img-blog.csdnimg.cn/20201109152254232.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2thaWtlYmE=,size_16,color_FFFFFF,t_70#pic_center)

继承

继承(Inheritance)是一个对象获得另一个对象的属性的过程。继承很重要,因为它支持了按层分类的概念。如前面提到的,大多数知识都可以按层级(即从上到下)分类管理。

例如,尊贵的猎犬是狗类的一部分,狗又是哺乳动物类的一部分,哺乳动物类又是动物类的一部分。如果不使用层级的概念,我们就不得不分别定义每个动物的所有属性。使用了继承,一个对象就只需定义使它在所属类中独一无二的属性即可,因为它可以从它的父类那儿继承所有的通用属性。所以,可以这样说,正是继承机制使一个对象成为一个更具通用类的一个特定实例成为可能。下面让我们更具体地讨论这个过程。

大多数人都认为世界是由对象组成的,而对象又是按动物、哺乳动物和狗这样的层级结构相互联系的。如果你想以一个抽象的方式描述动物,那么你可以通过大小、智力及骨胳系统的类型等属性进行描述。动物也具有确定的行为,它们也需要进食、呼吸,并且睡觉。这种对属性和行为的描述就是对动物类的定义。

如果你想描述一个更具体的动物类,比如哺乳动物,它们会有更具体的属性,比如牙齿类型、乳腺类型等。我们说哺乳类动物是动物的子类(subclass),而动物是哺乳动物的超类(superclass)。

![在这里插入图片描述](https://img-blog.csdnimg.cn/20201109152746970.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2thaWtlYmE=,size_16,color_FFFFFF,t_70#pic_center)

由于哺乳动物类是需要更加精确定义的动物,所以它可以从动物类继承(inherit)所有的属性。一个深度继承的子类继承了类层级(class hierarchy)中它的每个祖先的所有属性。

继承性与封装性相互作用。如果一个给定的类封装了一些属性,那么它的任何子类将具有同样的属性,而且还添加了子类自己特有的属性。这是面向对象的程序在复杂性上呈线性而非几何性增长的一个关键概念。新的子类继承它的所有祖先的所有属性。它不与系统中其余的多数代码产生无法预料的相互作用。

多态性

多态性(Polymorphism,来自于希腊语,表示“多种形态”)是允许一个接口被多个同类动作使用的特性,具体使用哪个动作与应用场合有关,下面我们以一个后进先出型堆栈为例进行说明。假设你有一个程序,需要3种不同类型的堆栈。一个堆栈用于整数值,一个用于浮点数值,一个用于字符。尽管堆栈中存储的数据类型不同,但实现每个栈的算法是一样的。如果用一种非面向对象的语言,你就要创建3个不同的堆栈程序,每个程序一个名字。但是,如果使用Java,由于它具有多态性,你就可以创建一个通用的堆栈程序集,它们共享相同的名称。

多态性的概念经常被说成是“一个接口,多种方法”。这意味着可以为一组相关的动作设计一个通用的接口。多态性允许同一个接口被必于同一类的多个动作使用,这样就降低了程序的复杂性。选择应用于每一种情形的特定的动作(specific action)(即方法)是编译器的任务,程序员无需手工进行选择。你只需记住并且使用通用接口即可。

再拿狗作比喻,一条狗的嗅觉是多态的。如果狗闻到猫的气味,它会在吠叫并且追着它跑。如果狗闻到食物的气味,它将分泌唾液并向盛着食物的碗跑去。两种状况下是同一种嗅觉器官在工作,差别在于闻到了什么气味,也就是有两种不同类型的数据作用于狗的鼻子!在一个Java程序中使用方法时,也可以采用这个通用的概念。返回搜狐,查看更多

责任编辑:

在java面向对象编程中_谈一谈你对封装_继承_多态概念的理解_Java新职篇:面向对象编程的3个原则是什么?...相关推荐

  1. Java笔记013-IDEA、包、访问修饰符、封装、继承、多态、Super、方法重写/覆盖(override)、java的动态绑定机制

    目录 面向对象编程(中级部分) IDE(集成开发环境)-IDEA IDEA介绍 IDE(集成开发环境)-Eclipse Eclipse介绍 IDEA的安装 IDEA的基本介绍和使用 创建一个java项 ...

  2. 什么是面向对象,它的三个基本特征:封装、继承、多态

    什么是面向对象思想?已经学完了java确不知道如何跟别人解释面向对象是什么意思这很常见.让我们一起来回顾下这个奇思妙想~ 文章目录 一.面向对象与面向过程 1.什么是面向过程? 2.什么是面向对象? ...

  3. java什么是布尔型_Java新职篇:是什么是布尔型?

    原标题:Java新职篇:是什么是布尔型? Java有一种表示逻辑值的简单类型,称为布尔型.它的值只能是真或假这两个值中的一个.它是所有的诸如a 下面的程序说明了布尔类型的使用: // Demonstr ...

  4. 面向对象的三大特征,封装、继承、多态的个人理解以及代码分析

    面向过程:我们以前使用的是面向过程编程,你需要清除每个实现步骤,每个步骤每行代码都要仔仔细细的编写, 不知道过程就找不到结果,找到实现过程就可以得到实现结果. 例如: 我们在外打工租房子,我们需要了解 ...

  5. Java的三大特性之封装、继承、多态-----最简理解

    根据网上其他地方的解释,以及查找资料,将自己对java三大特性的理解展示如下. 封装:(属性私有,set/get,在set中限定一些不安全的情况) 封装是指把一个对象的状态信息(也就是属性)隐藏在对象 ...

  6. OOJ-面向对象编程的三大特点-封装,继承,多态分析与实例

    今天谈谈面向对象编程的三个主要的关键词:封装.继承.多态. javascript面向对象编程,既然是面向对象编程不得不提到面向对象的几大关键字:封装,继承,多态. 首先:封装 在前几篇的文章中我们已经 ...

  7. python封装继承多态_浅谈JavaScript的面向对象和它的封装、继承、多态

    写在前面 既然是浅谈,就不会从原理上深度分析,只是帮助我们更好地理解... 面向对象与面向过程 面向对象和面向过程是两种不同的编程思想,刚开始接触编程的时候,我们大都是从面向过程起步的,毕竟像我一样, ...

  8. 到底什么是面向对象,面试中怎么回答。面向过程和面向对象的区别是什么。java跨平台特性以及java和C++的区别。面向对象的三大特性——封装、继承和多态。面向对象的高拓展性以及低耦合度怎么体现?

    Java语言具有的特点:面向对象.跨平台.多线程以及网络编程 1. 和C++的区别 1.1 Java隐蔽了C++的指针,避免指针直接操作,程序更加安全. 1.2 Java类继承只能单继承,避免了C++ ...

  9. java面向对象编程的三大基本特性--封装,继承,多态

    文章目录 封装 private 继承 extends 多态 abstract/interface/implements 封装 private 封装是面向对象编程的基本特点之一,也是它最核心的思想 类的 ...

最新文章

  1. [NOI 2015]荷马史诗
  2. Spring Boot中使用LDAP来统一管理用户信息
  3. Ubuntu中的vi模式中的按上下左右键变成ABCD解决方法
  4. Go语言中查询SqlServer数据库
  5. 【FPGA Verilog】实验二:key按键基础实验
  6. redis 持久化 + 主从复制+ 集群
  7. Gartner最新报告:阿里云计算、存储、网络、安全均获得最高分
  8. 解耦与人类行为 (完整)
  9. Python正则表达式re.sub使用
  10. C Shuffle Cards
  11. 任正非解读华为“狼文化”;丰巢高管:不会放弃超时收费;Debian 10.4 发布 | 极客头条...
  12. MySQL源码—线程篇
  13. 福州化工实验室建设注意隐患分析
  14. 在线长图片自动裁剪工具
  15. 数据分析师的工作职责
  16. python需要cpu还是显卡问题_如果研究深度学习方向,是CPU更重要还是显卡更重要?...
  17. electron设置淘宝镜像
  18. 第33次Scrum会议(11/21)【欢迎来怼】
  19. linux卸载集群oracle,Oracle RAC集群卸载步骤
  20. 188. 武士风度的牛 C++ bfs(宽度优先搜索)

热门文章

  1. java中servletcontext_java中获取ServletContext常见方法
  2. Vulhub 靶场下载使用
  3. pandas访问分组里面的数据_实战用pandas+PyQt5制作一款数据分组透视处理工具
  4. Android开发之通过ImageView名称从文件夹拿到ImageView的Drawable对象的方法
  5. Swift--基本运算符
  6. java启动scrapy爬虫,爬虫入门之Scrapy 框架基础功能(九)详解
  7. ConstraintLayout 学习笔记
  8. Linux下的screen(远程协作的用法)
  9. 物联网技术渐趋成熟 车联网应用或成市场主驱力
  10. Eclipse打包出错——提示GC overhead limit exceeded