浅谈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这几个类.你把这几个类拿给别人用,但 ...
随机推荐
- 力扣(LeetCode)加一 个人题解
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一. 最高位数字存放在数组的首位, 数组中每个元素只存储一个数字. 你可以假设除了整数 0 之外,这个整数不会以零开头. 示例 1: 输入 ...
- LVM扩容案例
LVM基础命令: pvdisplay 查看检查pv pvremove /dev/sdb #清除一个pv fdisk -l 检查磁盘 df -h 检查全部磁盘大小 df -Th 检查磁盘大小和分区格式类 ...
- 异步任务AsyncTask使用解析
在Android中实现异步任务机制有两种方式,Handler和AsyncTask. Handler模式需要为每一个任务创建一个新的线程,任务完成后通过Handler实例向UI线程发送消息,完成界面的更 ...
- vue 原生添加滚动加载更多
vue中添加滚动加载更多,因为是单页面所以需要在跳出页面时候销毁滚动,要不会出现错乱.我们在mounted建立滚动,destroyed销毁滚动. mounted () { window.addEven ...
- React躬行记(14)——测试框架
测试不仅可以发现和预防问题,还能降低风险.减少企业损失.在React中,涌现了多种测试框架,本节会对其中的Jest和Enzyme做详细的讲解. 一.Jest Jest是由Facebook开源的一个测试 ...
- Rust中的RefCell和内部可变性
RefCell Rust在编译阶段会进行严格的借用规则检查,规则如下: 在任意给定时间,要么只能有一个可变引用,要么只能有多个不可变引用. 引用必须总是有效. 即在编译阶段,当有一个不可变值时,不能可 ...
- 安装iris框架
1.导语 目前Go语言已经为大多数人所熟知,越来越多的开发人员选择使用Go语言来进行开发,但是如何使用 Go来进行web开发,在其他编程语言中都有对应的开发框架,当然在Go中也有,就是即将要介绍的-- ...
- 【Android - 组件】之IntentFilter的匹配规则
我们知道,Activity的启动模式分为两种,分别是显式启动和隐式启动.显式启动需要明确的指定被启动的对象的组件信息,包括包名和类名:而隐式启动需要 Intent 能够匹配目标组件的 IntentFi ...
- ftp 客户端 上传
ps: 1.使用netkit-ftp-0.17交叉编译出来的ftp客户端, 2.然后写上传代码,调用ftp传服务器: 3.最好使用bin二进制文件形式传输: 4.ftp客户端和Ubuntu自带的ftp ...
- Python存储数据的方式
在Python开发中,数据存储.读取是必不可少的环节,而且可以采用的存储方式也很多,常用的方法有json文件.csv文件.MySQL数据库.Redis数据库以及Mongdb数据库等. 1. json文 ...