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基础学习笔记(二) - 面向对象基础
面向对象 一.面向对象概述 面向对象思想就是在计算机程序设计过程中,参照现实事物,将事物的属性特征.行为特征抽象出来,描述成计算机时间的设计思想.面向对象思想区别于面向过程思想,强调的是通过调用对象的 ...
随机推荐
- Java中的继承、封装、多态的理解
Java中的继承.封装.多态 继承的理解: 1.继承是面向对象的三大特征之一,也是实现代码复用的重要手段.Java的继承具有单继承的特点,每个子类只有一个直接父类. 2.Java的继承通过extend ...
- Nginx-(四)基本模块2
nginx常用模块介绍(二) ngx_http_rewrite_module模块配置 (1) rewrite regex replacement [flag]; 将请求的url基于正则 ...
- Linux I/O复用 —— epoll 部分源码剖析
epoll 相关的系统调用有以下三个,这里简述下当调用对应函数后,内核的具体实现 epoll_creat( ) 在内核注册文件系统 eventpollfs,挂载此文件系统 (linux一切皆文件,便于 ...
- JavaScript实战实例剖析——(激励倒计时日历)
如今JavaScript在前端开发中的地位越来越高,掌握JavaScript的深度往往能决定你职业道路深远,这次通过制作 带着倒计时功能的激励日历的小实例,进一步细致的掌握JavaScript的语法与 ...
- Ztree树增删改查菜单,遇到的问题总结
一.引言 我今天做了一个Ztree树增删改查菜单的功能.其中遇到了很多坑爹的问题,和大家讲述一下. 二.代码展示 1.Ztree树前台代码 <%@ page language="jav ...
- Mybatis分页插件PageHelper的学习与使用
目录 中文教程 PageHelper使用 后端程序员都知道,在Web系统中,分页是一种常见的功能,我之前写的分页方法都比较麻烦,移植性也不高,这就很不乐观了.作为一个积极开朗的程序员,怎么能不去了解P ...
- Chapter 07-Basic statistics(Part3 correlations)
这一部分使用R基础已安装包中的state.x77数据集.该数据集的数据是关于美国50个州在1977年对人口,收入,文盲率,平均寿命,谋杀率,高中毕业率统计所得. 1.关联的种类(types of co ...
- centos7.6安装python3.7
1.安装python3.7后,需要: yum install libffi-devel -y 然后再到python源码目录再make install 重新编译一下. 否则pip安装一些包时会安装不上, ...
- MATLAB工具包——curvelet变换的理解(转)
curvelet下载的curvelet工具包,有以下三个文件:fdct_usfft_matlab.fdct_wrapping_matlab.mecv三个文件夹添加到matlab路径中即可. curve ...
- 集合<class'set'>
>>> s = {1,2,3,4} >>> s&{1,3}{1, 3}>>> s|{11}{1, 2, 3, 4, 11}>> ...