Java三大特性想必大家都不陌生:封装、继承以及多态。很多刚接触Java的小伙伴都会想,它们到底有什么了不得之处,又赋予Java这门编程语言什么魔力呢?今天我们来探讨一下吧~~

首先,名词解释:

封装,即是隐藏一切可隐藏的东西,对外界只提供最简单的编程接口。比如,在一个类中,把数据和操作方法绑定起来,对数据的访问只能通过这些 get/set 方法(又称为接口)来实现。

为什么封装?比如,我是一个厨师,我有一本食谱,你今天想吃肉,让我帮忙露两手。具体加了多少盐,放了多少醋你不需要关心(隐藏具体实现过程),你只管提出需求,我帮你实现(提供服务,即接口)。

继承,从已有类得到继承信息创建新类的过程。提供信息的叫父类(超类、基类),得到继承信息的叫子类(派生类)。既保证了延续性,又能实现可变性。

为什么继承?比如,我是一个厨师,厨艺高绝天下,你是我儿子,你自然要得到我的真传(继承父类的信息)。可是,有一天,你说你想去唱去跳去打篮球(实现可变)。儿子长大了,理应去追逐你自己的舞台,当爹的当然支持你(继承的优点展露无遗)。

多态:允许不同子类型对象对同一消息做出不同响应,即,用同样的对象,调用同样的方法,但是做了不同的事情。分为编译时多态(如:方法重载,同一个方法实现多个不同的逻辑,并可以在同一个类中实现。其实现的原理是,方法名相同,参数的个数或者类型不同)和运行时多态(如:方法重写,一个类中不可能两个定义一样的方法。因此,重写就是子类对父类定义的方法重新实现一次)。

为什么多态?比如,我是一个厨师,今天炒一道番茄鸡蛋,以往炒这道菜我会加入小葱和老姜做配料增香,但是今天小葱被隔壁老王借走了,那么我炒菜的时候就没加葱(参数个数不同),但这道菜还是番茄炒蛋(编译时多态);大儿子吃的很不满意,决定去老李家菜地里偷点葱,回来重新炒一个番茄炒蛋,配料虽然齐了,但是火候太大,炒糊了;你也不开心了,心里想着:你们都不行,让我来。于是把剩下的葱都拿去炒菜了,这次火候小了一点,番茄的口感和鸡蛋没有融合在一起,不过本质上和你哥哥炒的一样都是一道番茄炒蛋(方法重写)。

好了,Java三大特性就总结到这,如果有人跟你抬杠,说Java不是应该有四大特性么?你千万不要觉得人家是在为难你胖虎,因为,抽象也能算半个,只是平常淡出了大家的视线。

那么,什么是抽象呢?抽象就是将一类对象的共同特征总结出来,然后去构造类的过程(人类,特征?不详!)。包括数据抽象(手,足等??)和行为抽象(吃饭、睡觉)两方面,而抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么(只需要关注人类有吃饭这个属性即可,不需要关注用左手还是右手)。

谈完人类,心里面大约会有一丢丢小疑问,人的数据抽象是手足等特征么,那么缺失了手足的残疾人士就不属于人类了么?我觉得这个问题非常棒,首先,一个人的本质特征一定不是手足五官等外在形态。这时候就会有小伙伴来抬杠了:啥意思,你见到一个人,不是凭借外貌来辨别他们的么?对的,我们熟悉一个人,很多时候都会从外貌、声音等明显特征来识别,但若是他们戴着网络的面具,而且也没有和你说话,那么你是如何判断这究竟是不是我们熟悉的那个人呢?

所以,大家认为,人类的数据抽象到底是什么呢?

浅谈Java三大特性的更多相关文章

  1. 浅谈Java三大特性之封装

    目录 前言 好处 介绍(实现方式) 示例 小结 感谢阅读!!! 三大特性之浅谈封装 前言 英语:Encapsulation--封装,包装. 面向对象的封装与真实世界的目的是一样的.封装能够使外部访问者 ...

  2. 浅谈Java三大特性之多态

    目录 一.前言 二.发生的条件 三.多态包含(或者说体现在)两个方面: 四.示例 感谢阅读 一.前言 这篇讲下三大特性之一的多态,可以通俗得去理解,多种形态,多种姿态... 那么在面向对象的程序设计中 ...

  3. 浅谈Java三大特性之继承

    前言 简单用伪代码去介绍一些 父类与子类的构造函数问题 others 前言 类的继承性是面向对象语言的基本特性,多态性前提是继承性.Java 支持继承性和多态性.——Java从小白到大牛 继承:三大特 ...

  4. 浅谈Java三大框架与应用

    前言:对于一个程序员来说,尤其是在java web端开发的程序员,三大框架:Struts+Hibernate+Spring是必须要掌握熟透的,因此,下面谈谈java三大框架的基本概念和原理. JAVA ...

  5. !! 浅谈Java学习方法和后期面试技巧

    浅谈Java学习方法和后期面试技巧 昨天查看3303回复33 部落用户大酋长 下面简单列举一下大家学习java的一个系统知识点的一些介绍 一.java基础部分:java基础的时候,有些知识点是非常重要 ...

  6. 浅谈java类集框架和数据结构(2)

    继续上一篇浅谈java类集框架和数据结构(1)的内容 上一篇博文简介了java类集框架几大常见集合框架,这一篇博文主要分析一些接口特性以及性能优化. 一:List接口 List是最常见的数据结构了,主 ...

  7. 浅谈Java线程安全

    浅谈Java线程安全 - - 2019-04-25    17:37:28 线程安全 Java中的线程安全 按照线程安全的安全程序由强至弱来排序,我们可以将Java语言中各种操作共享的数据分为以下五类 ...

  8. 浅谈Java的默认和静态方法

    目录 浅谈Java的默认和静态方法 Java新增默认方法有啥用 Java新增的静态方法有啥用 浅谈Java的默认和静态方法 允许在接口中声明默认方法和静态方法,是JDK1.8新增的特性.存在即合理,两 ...

  9. 浅谈Java接口(Interface)

    浅谈Java接口 先不谈接口,不妨设想一个问题? 如果你写了个Animal类,有许多类继承了他,包括Hippo(河马), Dog, Wolf, Cat, Tiger这几个类.你把这几个类拿给别人用,但 ...

随机推荐

  1. 力扣(LeetCode)加一 个人题解

    给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一. 最高位数字存放在数组的首位, 数组中每个元素只存储一个数字. 你可以假设除了整数 0 之外,这个整数不会以零开头. 示例 1: 输入 ...

  2. LVM扩容案例

    LVM基础命令: pvdisplay 查看检查pv pvremove /dev/sdb #清除一个pv fdisk -l 检查磁盘 df -h 检查全部磁盘大小 df -Th 检查磁盘大小和分区格式类 ...

  3. 异步任务AsyncTask使用解析

    在Android中实现异步任务机制有两种方式,Handler和AsyncTask. Handler模式需要为每一个任务创建一个新的线程,任务完成后通过Handler实例向UI线程发送消息,完成界面的更 ...

  4. vue 原生添加滚动加载更多

    vue中添加滚动加载更多,因为是单页面所以需要在跳出页面时候销毁滚动,要不会出现错乱.我们在mounted建立滚动,destroyed销毁滚动. mounted () { window.addEven ...

  5. React躬行记(14)——测试框架

    测试不仅可以发现和预防问题,还能降低风险.减少企业损失.在React中,涌现了多种测试框架,本节会对其中的Jest和Enzyme做详细的讲解. 一.Jest Jest是由Facebook开源的一个测试 ...

  6. Rust中的RefCell和内部可变性

    RefCell Rust在编译阶段会进行严格的借用规则检查,规则如下: 在任意给定时间,要么只能有一个可变引用,要么只能有多个不可变引用. 引用必须总是有效. 即在编译阶段,当有一个不可变值时,不能可 ...

  7. 安装iris框架

    1.导语 目前Go语言已经为大多数人所熟知,越来越多的开发人员选择使用Go语言来进行开发,但是如何使用 Go来进行web开发,在其他编程语言中都有对应的开发框架,当然在Go中也有,就是即将要介绍的-- ...

  8. 【Android - 组件】之IntentFilter的匹配规则

    我们知道,Activity的启动模式分为两种,分别是显式启动和隐式启动.显式启动需要明确的指定被启动的对象的组件信息,包括包名和类名:而隐式启动需要 Intent 能够匹配目标组件的 IntentFi ...

  9. ftp 客户端 上传

    ps: 1.使用netkit-ftp-0.17交叉编译出来的ftp客户端, 2.然后写上传代码,调用ftp传服务器: 3.最好使用bin二进制文件形式传输: 4.ftp客户端和Ubuntu自带的ftp ...

  10. Python存储数据的方式

    在Python开发中,数据存储.读取是必不可少的环节,而且可以采用的存储方式也很多,常用的方法有json文件.csv文件.MySQL数据库.Redis数据库以及Mongdb数据库等. 1. json文 ...