java基础-谈谈你对面向对象的理解
一 前言
本篇文章的核心知识如下,主要是帮助大家更好的理解面向对象编程; 
二面向对象VS面向过程
2.1 面向过程编程
面向过程编程(Process Oriented Programming )其意指是面向过程编程,what?,过程是什么?

面向过程编程其实是围绕着代码的执行过程而实现;我们打个比喻我现在想把昨天没洗的衣服给洗了(笑话,这绝对不是我,我用纯洁的人格担保!!!),我要执行的步骤如下:
衣服倒进桶里; 将水倒进桶里;nei 添加洗衣液和各种香料等待30分钟 洗刷刷.....
那转为代码就是:
// 1这是个野生的方法---装衣服
containClothes().......
// 2这是个野生的方法-----倒水
pourWater()..........
// 3 这是个野生的方法-------倒洗衣液
pourWashingLiquid()............
// 4 这是个野生的方法-----洗刷刷
washClothes().............
好麻烦啊,我洗个衣服竟然要执行这么步骤,敬佩前辈么洗刷刷能力

2.2 面向对象编程
面向对象编程(Object Oriented Programming,OOP)其意指面向对象编程,略略略......这不是废话么,没错啊就是这句废话,我们要理解的核心概念是什么是对象?

对象这个名称其实很普通啊,比如你家里人经常会说,孩子啊,最近有对象了,奶奶等等着报孙子里,...........,这是真的么?难道java中面向对象编程就是指生活中相处的对象?那我编写个女孩子对象,是不是就有对象啦,呵呵............,你想的真美好(跟代码生孩子去吧!!!);
面向对象中的对象其实就是面向事物,《Think in java》中有一句话叫啥来着?万物皆对象...额,一切皆对象...额,没错啥都是对象;好吧如果你是初学者去面试,就别吹这就话了,你想跟老程序抢饭碗啊!!!

面向对象编程我们已经理解了,就是类似根据生活中中的事物编程,嗯?回到刚刚洗衣服的话题上,生活中的事物编程.......聪明如我这样的孩子已经想到了,本宝怎么会自己洗衣服呢!!!太low了,我要叫一个对象来给我洗衣服,我就不叫其他人帮我洗了,会遭天妒,还是叫最普通的把,比如洗衣机这个对象;
我把衣服倒进洗衣机; 我把洗衣液倒进洗衣机; 开启启动程序,洗衣机麻烦你洗洗衣服啊哈哈;
可以看见我们简化了一些步骤吖,不用拿桶了,不用自己洗衣服;转换成代码就是这样
// 1 知识追寻者这个对象的方法---倒衣服
zxzxz.pourClothes()........
// 2 知识追寻者这个对象的方法---倒洗衣液
zszxz.pourWashingLiquid()............
// 3 洗衣机这个对象的方法-----洗衣服
WashingMachine.washClothes().............
面向对象中的对象在java编程中就是Object,每个对象都有自己的类型也就是Class,你可以这样理解,一个类型有多个对象实例(instance),比如,洗衣机有小天鹅洗衣机对象,海尔洗衣机对象;
三 抽象
面向对象的本质其实就是抽象;啥是抽象啊,好深奥的感觉,膜拜当年的大佬用了这么高大尚的术语;抽象我们通俗的理解就是将具体的功能和行为属性抽象出来看待成一个实体;说了这么多,你可能还是一脸懵逼........

就以洗衣机为例子,我现在要将洗衣机有容纳东西的功能,有排水的功能,有洗衣服的功能......好了这么多功能和属性我将它们都抽象出来形成一个实体;那么代码就是如下
public class WashingMaching {
public void contain(Object obj){
// do contain
}
public void drainWater(){
// do drain water
}
public void washingClothes(Clothes clothes){
}
}
四 创建对象
说了那么多关于对象的事情,但是永恒的主题你要告诉我对象是怎么创建的吧, 看如下代码,创建对象是通过 new 这个关键字创建;我们创建了一个对象叫做 wm,也就是实例,它属于 WashingMaching 这个类;执行drainWater()这个方法,表示实例wm执行了其成员方法;
// create object
WashingMaching wm = new WashingMaching();
// invoke method
wm.drainWater();
五 面向对象的三大原则
5.1 封装
封装其实就是将对象的属性行为隐藏,使其不受外界干扰;我是个冷酷的孩子,不要用你那肮脏的想法揣测我!!!我内在神奇的能力你永远不知道;封装目的就是隐藏,防止被其他对象所破坏;就像人与人之间相处,一定要有隐私空间,难道你是暴露狂???

5.2 继承
继承就是子类继承父类,子类将拥有父类的所有属性;说个玩笑,某某小伙子正在街头流浪,突然有一天一队军队围住了他,一个矮矮的胖子告诉他,皇帝驾崩啦,你是皇帝唯一的儿子,快跟我回宫登基为帝,继承家业吧!!!在java中都是单继承,所有的对象都有个父类就是Object;使用extends关键字表示继承关系;在继承中添加新方法可以扩展对象功能,重写父类方法可以实现子类特有功能;

5.3 多态
多态表示一个对象可以表示出多种状态,即对象的状态是可以在子类和父类之间相互转换;举个简单的栗子:小水滴,晨露,雨滴,水雾,本质上都是水,我们认为他们都继承了水;小水滴可以转换成水,这就是向上转型(即向父类靠近),现在小水滴就表现出了2种状态,一种是水的状态,一种是小水滴的状态;如果说水要转换成晨露,就是向下转型(向子类靠近),但是下转型是有风险的,晨露是水,难道水就一定只有晨露这个状态么?显然不可能,水还可以转为雨滴,水雾等.....,通常向下转型是要做类型判断,使用关键字 instanceof判断;

java基础-谈谈你对面向对象的理解的更多相关文章
- 【java基础】程序员你真的理解反射机制吗?
目录 前言 1.反射的概述 2.正式使用反射之前很有必要了解的Class类 3.反射的使用 前言 很多讲解反射的博客文章并没有详细讲解Class类,~当然包括之前的我也一样~,这样的文章只会让反射徒有 ...
- java基础(5)----面向对象
编程思想: 简单的说一下,我们学习编程,最重要的就是要有编程思想,而编程思想无非就是面向过程和面向对象,以下谈谈我对编程思想的理解. 面向过程: 从过程入手,第一步,第二步--.借助过程与过程的配合, ...
- 【Java基础】【09面向对象_多态&抽象类&接口】
09.01_面向对象(多态的概述及其代码体现) A:多态(polymorphic)概述 事物存在的多种形态 B:多态前提 a:要有继承关系. b:要有方法重写. c:要有父类引用指向子类对象. C:案 ...
- Java基础(二)面向对象(上)
面向对象基础知识 面向对象是相对面向过程而言的 面向对象和面向过程都是一种思想 面向过程强调的是功能行为 面向对象将功能封装进对象,强调具备了功能的对象 面向对象是基于面向过程的 面向对象的特征: 封 ...
- java基础(七)面向对象(二)
这里有我之前上课总结的一些知识点以及代码大部分是老师讲的笔记 个人认为是非常好的,,也是比较经典的内容,真诚的希望这些对于那些想学习的人有所帮助! 由于代码是分模块的上传非常的不便.也比较多,讲的也是 ...
- java基础 (六)面向对象(一)
这里有我之前上课总结的一些知识点以及代码大部分是老师讲的笔记 个人认为是非常好的,,也是比较经典的内容,真诚的希望这些对于那些想学习的人有所帮助! 由于代码是分模块的上传非常的不便.也比较多,讲的也是 ...
- 【Java基础】【07面向对象-构造方法&静态static】
07.01_面向对象(构造方法Constructor概述和格式)(掌握) A:构造方法概述和作用 给对象的数据(属性)进行初始化 B:构造方法格式特点 a:方法名与类名相同(大小也要与类名一致) b: ...
- 夯实Java基础(四)——面向对象之多态
1.多态介绍 面向对象三大特征:封装.继承.多态.多态是Java面向对象最核心,最难以理解的内容.从一定角度来看,封装和继承几乎都是为多态而准备的. 多态就是指程序中定义的引用变量所指向的具体类型和通 ...
- Java基础学习笔记(二) - 面向对象基础
面向对象 一.面向对象概述 面向对象思想就是在计算机程序设计过程中,参照现实事物,将事物的属性特征.行为特征抽象出来,描述成计算机时间的设计思想.面向对象思想区别于面向过程思想,强调的是通过调用对象的 ...
随机推荐
- vue监听移动设备的返回事件
在公共方法文件common.js中实现一个存储当前历史记录的方法 common.js // 存储当前历史记录点,实现控制手机物理返回键的按钮事件 var pushHistory = function ...
- Swoft 源码剖析 - Swoole和Swoft的那些事 (Http/Rpc服务篇)
前言 Swoft在PHPer圈中是一个门槛较高的Web框架,不仅仅由于框架本身带来了很多新概念和前沿的设计,还在于Swoft是一个基于Swoole的框架.Swoole在PHPer圈内学习成本最高的工具 ...
- 使用selenium模拟登陆新浪微博
1.selenium基本使用 1.selenium安装及基本操作 selenium是一个自动化测试工具,它支持各种浏览器,包括Chrome,Safari,Firefox等主流界面浏览器驱动,也包括Ph ...
- Theano教程
让我们开始一个交互式会话(例如使用python或ipython)并导入Theano. from theano import * 你需要使用Theano的tensor子包中的几个符号.让我们以一个方便的 ...
- Socket 实现简单的多线程服务器程序
**********服务器端************* public class ServerSocket{ public static void main(String[] args) throws ...
- ibatis入门实例(完整)
一:首先展示一下我的web文件结构,首先导入Ibatis所需jar和数据库驱动,从第二步开始跟着笔者一步步来 二:数据库建测试表 CREATE TABLE STUDENT ( ID NUMBER(5) ...
- .Net Core3.0 WEB API 中使用FluentValidation验证,实现批量注入
为什么要使用FluentValidation 1.在日常的开发中,需要验证参数的合理性,不紧前端需要验证传毒的参数,后端也需要验证参数 2.在领域模型中也应该验证,做好防御性的编程是一种好的习惯(其实 ...
- 【Android - 控件】之可悬浮列表StickyHeadersRecyclerView
这是timehop的GitHub上发表的一个控件框架,大家可以去参考它的[GitHub]. 这里先贴出GitHub上提供的效果图: 要使用这个框架,我们需要首先导入它的依赖: compile 'com ...
- 混淆矩阵-MATLAB代码详解
一.混淆矩阵 (一).简介 在人工智能中,混淆矩阵(confusion matrix)是可视化工具,特别用于监督学习,在无监督学习一般叫做匹配矩阵.在图像精度评价中,主要用于比较分类结果和实际测得值, ...
- solr 的安装和配置
Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口.用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引:也可以通过Http Get操 ...