浅谈Java三大特性
Java三大特性想必大家都不陌生:封装、继承以及多态。很多刚接触Java的小伙伴都会想,它们到底有什么了不得之处,又赋予Java这门编程语言什么魔力呢?今天我们来探讨一下吧~~
首先,名词解释:
封装,即是隐藏一切可隐藏的东西,对外界只提供最简单的编程接口。比如,在一个类中,把数据和操作方法绑定起来,对数据的访问只能通过这些 get/set 方法(又称为接口)来实现。
为什么封装?比如,我是一个厨师,我有一本食谱,你今天想吃肉,让我帮忙露两手。具体加了多少盐,放了多少醋你不需要关心(隐藏具体实现过程),你只管提出需求,我帮你实现(提供服务,即接口)。
继承,从已有类得到继承信息创建新类的过程。提供信息的叫父类(超类、基类),得到继承信息的叫子类(派生类)。既保证了延续性,又能实现可变性。
为什么继承?比如,我是一个厨师,厨艺高绝天下,你是我儿子,你自然要得到我的真传(继承父类的信息)。可是,有一天,你说你想去唱去跳去打篮球(实现可变)。儿子长大了,理应去追逐你自己的舞台,当爹的当然支持你(继承的优点展露无遗)。
多态:允许不同子类型对象对同一消息做出不同响应,即,用同样的对象,调用同样的方法,但是做了不同的事情。分为编译时多态(如:方法重载,同一个方法实现多个不同的逻辑,并可以在同一个类中实现。其实现的原理是,方法名相同,参数的个数或者类型不同)和运行时多态(如:方法重写,一个类中不可能两个定义一样的方法。因此,重写就是子类对父类定义的方法重新实现一次)。
为什么多态?比如,我是一个厨师,今天炒一道番茄鸡蛋,以往炒这道菜我会加入小葱和老姜做配料增香,但是今天小葱被隔壁老王借走了,那么我炒菜的时候就没加葱(参数个数不同),但这道菜还是番茄炒蛋(编译时多态);大儿子吃的很不满意,决定去老李家菜地里偷点葱,回来重新炒一个番茄炒蛋,配料虽然齐了,但是火候太大,炒糊了;你也不开心了,心里想着:你们都不行,让我来。于是把剩下的葱都拿去炒菜了,这次火候小了一点,番茄的口感和鸡蛋没有融合在一起,不过本质上和你哥哥炒的一样都是一道番茄炒蛋(方法重写)。
好了,Java三大特性就总结到这,如果有人跟你抬杠,说Java不是应该有四大特性么?你千万不要觉得人家是在为难你胖虎,因为,抽象也能算半个,只是平常淡出了大家的视线。
那么,什么是抽象呢?抽象就是将一类对象的共同特征总结出来,然后去构造类的过程(人类,特征?不详!)。包括数据抽象(手,足等??)和行为抽象(吃饭、睡觉)两方面,而抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么(只需要关注人类有吃饭这个属性即可,不需要关注用左手还是右手)。
谈完人类,心里面大约会有一丢丢小疑问,人的数据抽象是手足等特征么,那么缺失了手足的残疾人士就不属于人类了么?我觉得这个问题非常棒,首先,一个人的本质特征一定不是手足五官等外在形态。这时候就会有小伙伴来抬杠了:啥意思,你见到一个人,不是凭借外貌来辨别他们的么?对的,我们熟悉一个人,很多时候都会从外貌、声音等明显特征来识别,但若是他们戴着网络的面具,而且也没有和你说话,那么你是如何判断这究竟是不是我们熟悉的那个人呢?
所以,大家认为,人类的数据抽象到底是什么呢?
浅谈Java三大特性的更多相关文章
- 浅谈Java三大特性之封装
目录 前言 好处 介绍(实现方式) 示例 小结 感谢阅读!!! 三大特性之浅谈封装 前言 英语:Encapsulation--封装,包装. 面向对象的封装与真实世界的目的是一样的.封装能够使外部访问者 ...
- 浅谈Java三大特性之多态
目录 一.前言 二.发生的条件 三.多态包含(或者说体现在)两个方面: 四.示例 感谢阅读 一.前言 这篇讲下三大特性之一的多态,可以通俗得去理解,多种形态,多种姿态... 那么在面向对象的程序设计中 ...
- 浅谈Java三大特性之继承
前言 简单用伪代码去介绍一些 父类与子类的构造函数问题 others 前言 类的继承性是面向对象语言的基本特性,多态性前提是继承性.Java 支持继承性和多态性.——Java从小白到大牛 继承:三大特 ...
- 浅谈Java三大框架与应用
前言:对于一个程序员来说,尤其是在java web端开发的程序员,三大框架:Struts+Hibernate+Spring是必须要掌握熟透的,因此,下面谈谈java三大框架的基本概念和原理. JAVA ...
- !! 浅谈Java学习方法和后期面试技巧
浅谈Java学习方法和后期面试技巧 昨天查看3303回复33 部落用户大酋长 下面简单列举一下大家学习java的一个系统知识点的一些介绍 一.java基础部分:java基础的时候,有些知识点是非常重要 ...
- 浅谈java类集框架和数据结构(2)
继续上一篇浅谈java类集框架和数据结构(1)的内容 上一篇博文简介了java类集框架几大常见集合框架,这一篇博文主要分析一些接口特性以及性能优化. 一:List接口 List是最常见的数据结构了,主 ...
- 浅谈Java线程安全
浅谈Java线程安全 - - 2019-04-25 17:37:28 线程安全 Java中的线程安全 按照线程安全的安全程序由强至弱来排序,我们可以将Java语言中各种操作共享的数据分为以下五类 ...
- 浅谈Java的默认和静态方法
目录 浅谈Java的默认和静态方法 Java新增默认方法有啥用 Java新增的静态方法有啥用 浅谈Java的默认和静态方法 允许在接口中声明默认方法和静态方法,是JDK1.8新增的特性.存在即合理,两 ...
- 浅谈Java接口(Interface)
浅谈Java接口 先不谈接口,不妨设想一个问题? 如果你写了个Animal类,有许多类继承了他,包括Hippo(河马), Dog, Wolf, Cat, Tiger这几个类.你把这几个类拿给别人用,但 ...
随机推荐
- java编程思想第四版第十三章字符串 总结
1. String和StringBulider的使用 通过书中介绍, 我们得知如下结论: 当使用+连接符将字符串进行拼接的时候, 编译器会进行自动优化为使用StringBuilder连接字符串. 当在 ...
- 【python测试开发栈】python基础语法大盘点
周边很多同学在用python,但是偶尔会发现有人对python的基础语法还不是特别了解,所以帮大家梳理了python的基础语法(文中的介绍以python3为例).如果你已然是python大牛,可以跳过 ...
- nyoj 243-交换输出 (swap)
243-交换输出 内存限制:64MB 时间限制:3000ms 特判: No 通过数:16 提交数:39 难度:1 题目描述: 输入n(n<100)个数,找出其中最小的数,将它与最前面的数交换后输 ...
- 领扣(LeetCode)寻找旋转排序数组中的最小值 个人题解
假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] ). 请找出其中最小的元素. 你可以假设数组中不存在重 ...
- centos7清理矿机木马qw3xT,kpgrbcc
腾讯云报告了root口令被暴力破解,并种了木马kpgrbcc 昨晚找到/usr/bin/ rm -rf kpgrbcc 删除 rm -rf kpgrbcb 删除 并ps -ef | grep kpg ...
- PHP抓取远程图片教程(包含不带后缀图片)
之前做微信登录开发时候,发现微信头像图片没有后缀名,传统的图片抓取方式不奏效,需要特殊的抓取处理.所以,后来将各种情况结合起来,封装成一个类,分享出来. 创建项目 作为演示,我们在www根目录创建项目 ...
- PowerDesigner从安装到同步数据库
前言 最近项目在如火如荼的进行着4.0版本的数据库设计工作,我们几个后端小伙伴也马不停蹄的进行着数据库的设计.使用的设计软件是PowerDesigner,这里记录一些常见的问题以备日后查看 安装 链接 ...
- 关于Java中2.0-1.1!=0.9的问题
关于Java中2.0-1.1!=0.9的问题 问题引出: 在<Java核心技术>中关于浮点数值计算部分提到,System.out.println(2.0-1.1)这条语句并不是想当然的0. ...
- JAVA中的类不要使用$符的原因解析
下面是在Java中标识符的定义 1.标识符由字母.数字.货币符号(¥.$等).连接符号(_等)组成.(这里的字母为Unicode字符集, 而不再局限于传统的26个英文字母.)2.标识符的首字符可以是字 ...
- HTML、CSS基础知识
前端基础 1. CSS 8 1.1. CSS叫做层叠样式表,用来设置页面中元素的样式.背景颜色.字体颜色.字体大小... 8 1.2. CSS负责结构.表现.行为中的表现 8 1.3. 编写的位置 8 ...