J2SE视频之面向对象——踏破铁鞋无觅处
面向对象(Object Oriented,OO)是软件开发方法。面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术展到一定阶段后的产物。这篇博客小编将和大家分享我对面向对象中一些名词的认识,如果有不合理的请指正。
一、面向过程和面向对象:
面向过程:以过程为中心的编程思想。分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。以汽车为例,对汽车的启动,停止等方法具体实现,这就是面向过程。
面向对象:以事物为中心的编程思想。面向对象程序设计中的每一个对象都应该能够接受数据、处理数据并将数据传达给其它对象,因此它们都可以被看作一个小型的“机器”,即对象。还以汽车为例,我们生产汽车,只需购买各种零部件,然后组装就可以,不用关心零部件是怎么造出来的,也就是我们只关心我们所抽象出来的对象的属性等,而不关心该汽车的一些事件。这就是面向对象。
二、面向对象三特征:
1.封装
封装是指将现实世界中存在的某个客体的属性与行为绑定在一起,并放置在一个逻辑单元内。该逻辑单元负责将所描述的属性隐藏起来,外界对客体内部属性的所有访问只能通过提供的用户接口实现。只要用户接口不改变,任何封装体内部的改变都不会对软件系统的其他部分造成影响。良好的封装能减少耦合,不至于,车轮胎坏了,再换辆新车。
生活中的小例子比如说汽车的轮胎坏了,我再换一个,结果并没影响整辆车的行驶,这就是封装,封装了轮胎的材质和它的滚动的方法,封装好了之后,将轮胎通过一个接口将轮胎安装在汽车上,这样即使轮胎换了一个,也不会对车的行驶造成影响。这个和分层思想很接近。
2.继承
继承有点分类的感觉,比如,猫和狗都属于动物,但又不全一样。如果子类继承与父类,第一,子类拥有父类非private的属性和功能;第二,子类具有自己的属性和功能,即子类可以扩展父类没有的属性和功能;第三,子类还可以以自己的方式实现父类的功能(方法重写)。
不用继承的话,如果要修改功能,就必须在所有重复的方法中修改,代码越多,出错的可能就越大,而继承的优点是,子类公共的部分放在了父类,使代码得到了共享,这就避免了重复。
3.多态
比如猫类和狗类都继承于动物类,动物类中有个跑的方法run(),但猫有猫的跑法,狗有狗的跑法,多态表示猫和狗可以执行相同的动作,但要通过他们自己的实现代码来执行。这就是多态。
三必要条件:
(1)继承
(2)重写
(3)父类引用指向子类对象
例:子弹与飞机:我们的目的是将子弹与飞机封装起来,把画面上有的飞机与子弹画出来。
方案1.拿出每个来,判断,是子弹,画子弹,是飞机画飞机
方案2.设计一个父类,其中定义一个方法draw,子弹和飞机都继承父类,直接调父类的draw方法即可
可扩展性:
主建筑建好,将来加一些其他建筑,尽量不要去修改主建筑,盖厨房,直接在主建筑旁边建,我不能说把房子拆了重盖,这样谁也不会同意的。这就是可扩展性。这也体现了开闭原则,对修改关闭,对扩展开放。
三、面向对象思考过程?
1.首先确定用哪个对象;
2.类和对象应该有哪个属性,哪个方法;
3.类与类之间有什么关系
四、对象和类
对象:一切事物皆对象,就是可以看到,听到,尝到或闻到的东西。对象可看成是静态变量(成员变量)和属性(方法)的载体。
类:具有相同的属性和功能的对象的抽象的集合。所有类都有构造方法。他的使用很简单,就实例化一下就可以了。
五、为什么用对象?
1.面向对象的编程——一组对象互相配合通过沟通完成特定功能
2.对象都有对外服务的接口——通过继承可以复用
3.对象隐藏内部服务的实现——通过聚合可以复用
4.面向对象更加容易使我们达到这些年来苦苦追求的境界——维护和替换更加方便
5.组件——比对象更高的层次上的抽象
六、对象的创建和使用
1.必须使用new
2.用对象引用成员变量或来引用对象的成员变量
3.使用对象引用方法来调用对象的方法
4.同一类的每个对象有不同的成员变量存储空间
5.同一类的每个对象共享该类的方法
七、抽象类、接口类
抽象类:abstract修饰,需要注意的:
1.抽象方法一定要重写
2.抽象类不能被实例化
3.含抽象方法的类一定声明为抽象类
例子:
接口类:抽象方法和常量值的定义的集合,是特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。
特性:
1.可多重实现。
2.java接口中声明的属性默认为public static final的,也只能是public static final的。
3.只能定义抽象方法,默认public ,只能是public的。
4.可继承其他接口,并添加新的属性和抽象方法。
有趣的小例子:让猫飞
猫不能飞,但是我想实现让猫飞,所以我实现了飞这个接口,这个飞类便是接口类。
有关接口类需要注意:
1.多个无关的额类可以实现同一个接口
2.一个类可以实现多个无关的接口
3.与继承关系类似,接口与实现类之间存在多态性
4.实现了接口,就必须写出接口所有的方法
八、构造方法
构造方法又叫构造函数,其实就是对类进行初始化。构造方法与类同名,无返回值,也不需要void,在new的时候调用。比如:Cat cat=new Cat();new后面的Cat()其实就是构造方法。每个类都有构造方法,如果不编码则系统默认生成空的构造方法,如果编码了,默认的机会失效。
继承中的构造方法:
- 调子类对象必须先调父类构造方法(不会产生父类对象)
- 子类可在自己的构造方法中使用super(argument_list)调用基类的构造方法
- 系统默认调用基类无参数的构造方法
- 子类中无显式调用基类构造方法,基类中又没有无参的构造方法,则编译出错。
九、重载、重写、重构
重载:同名的方法可传入不同的参数,这样,系统根据传入的参数选择执行不同的构造方法;
重写:子类都继承父类的方法,猫和狗,谁有谁的叫声,所以就要重写;
重构:动物们参加叫声比赛,刚开始写好了代码,后来小牛和小羊来报名参加比赛,这时按照原来的想法,让他们都继承Animal类就可以了,可是写完发现除了叫声不同,其他代码没有区别,这时就要想想把重复的代码放到父类Animal类中了,子类单独将声音重写即可,这就叫重构。
十、内存分析贯穿始终
创建对象是使用构造函数初始化对象的成员变量,new时,调完构造方法,方法分配的局部变量内存消失(对象被垃圾回收)。这块还不是很熟悉,正在学习中。。。
总结:
以前总结的面向对象很少,这次把一些基础都总结了下,有些可能不合理,欢迎您的指正!
感谢您宝贵的时间!
J2SE视频之面向对象——踏破铁鞋无觅处相关推荐
- 踏破铁鞋无觅处,得来全不费工夫--删除文本多余空行ClipboardFormatter
从网上拷一些文章,总是有很多很多很多....的空行, 如下图(CRLF就是换行符\r\n),怎么去掉它们呢? 一般方法就是贴到文本编辑器中, 然后查找替换,查找替换,查找替换.... 周而复始,不厌其 ...
- 面向对象方法-大话设计模式+J2SE视频
好像从接触编程开始,面向对象这个词总会出现.与面向对象方法作对比的是面向过程. 在大话设计模式这本书里,为什么要讲面向对象呢?并且作者在序言里提到,先看附录里的面向对象.作者为读者简述面向对象的知识, ...
- 电脑上视频剪辑软件预览处只有画面没有声音
在剪辑视频时发现视频预览处只有声音没有画面,换了另一个软件发现还是这种情况. 右键此电脑,点击管理,设备管理器,显示适配器,选则某一个,右键点击禁用设备,重新打开视频剪辑软件就好了.
- 【c#视频】——面向对象——多态
多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的结果.也就是说,同一个类型的实例调用"相同"的方法,产生的结果是不同的,这里的"相同"打上双引号是因 ...
- 组合数学 北师大 张秀平 自学 视频 NOIP
姐妹篇:图论 北师大 张秀平 自学 视频 NOIP 请看https://blog.csdn.net/mrcrack/article/details/80563165 组合数学 北师大 张秀平 自学 视 ...
- OC基础--OC内存管理原则和简单实例
ARC: 由于自己的学习视频太早,Xcode是iOS6版本,新建命令行项目后,系统会默认启动ARC机制,全程Automatic Reference Counting,简单的说,就是代码中自动加入了re ...
- 设计模式只是一把锤子,不要拿着到处去敲!
谈起<设计模式>,那是几乎无人不知,无人不晓,大名鼎鼎的GoF的惊世之作,真是"平生不识GoF,学尽设计也枉然"! 然而,设计模式真的是软件设计的"瑞士军刀& ...
- 一个人工作之余6元上线一款APP的血泪史
码字不易,转载请注明:转自http://www.jianshu.com/p/21ae5a3037d7 很久没有写博客了,一方面是前段时间工作项目太忙,再加上想完成自己的一个目标.还有就是写博客真的有点 ...
- 转:通信十年:前辈对通信行业的分析与经历
离开通信行业已经有一段日子了.换了行业之后,慢慢的淡忘了通信的各种艰辛和酸甜苦辣. 前天晚上,突然在梦中回到以前做移动通信(核心网)技术支持的日子,回到了7*12小时工作,每天提着笔记本,没有一天(包 ...
最新文章
- 10月21日!API 大赛决赛暨移动云开发者论坛邀您见证数字创新的力量
- 一文读懂深度学习:这个AI核心技术被美国掌控,很危险
- 编程小白的第一本python入门书-《编程小白的第一本Python入门书》读书笔记
- linux cut性能,Linux cut
- AI:IPPR的数学表示-CNN结构进化(Alex、ZF、Inception、Res、InceptionRes)
- Java的JAR包, EAR包 ,WAR包内部结构
- Android之——图片的内存优化
- MySQL innodb下的记录锁,间隙锁,next-key锁
- MySQL 8 + Navicat for MySQL安装步骤
- win10系统文件拖拽卡顿_win10系统下移动鼠标卡顿如何解决
- 电脑扬声器安装程序(UNKNOW)
- 程序猿头头(数组应用)
- Sat Sep 25 07:38:46 Local time zone must be set--see zic manual page 2021
- Android字体加粗,UI小姐姐说太粗了,解决办法
- android数据线接口定义,安卓手机数据线接口类型
- 中望3D 2020 图层管理器(图层的设置+移动图层+复制图层)
- C#调用cplex出现引发类型为“ILOG.Concert.Exception”的异常
- [转载]流利说Level5
- “假作真时真亦假”:分类器设计中几个常见的评价指标
- 解决管理问题的基本思维方式