黑马程序员——学习日记2——面向对象
来源:互联网 发布:turn a高达知乎 编辑:程序博客网 时间:2024/05/23 15:04
------- android培训、java培训、期待与您交流! ----------
面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构。OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。OOP 达到了软件工程的三个主要目标:重用性、灵活性和扩展性。为了实现整体运算,每个对象都能够接收信息、处理数据和向其它对象发送信息。常见的面向对象编程语言有java,C++,C#等。用句通俗是话说,面向对象语言就像是人与人之间交流一样,你需要对方的一些东西,对方在一定条件下把你需要的给你,但你并不知道对方是否有其它东西。
面向对象编程的三大特性:封装、继承、多态。
一 封装:
概念:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
好处:将变化隔离;便于使用;提高重用性;安全性。
封装原则:将不需要对外提供的内容都隐藏起来,把属性都隐藏,提供公共方法对其访问。 封装,就好比人的隐私一样,不想被被人看见,即封装起来。这样,就使得类和方法有了访问限定,于是就有了访问修饰符。
publicprotecteddefault(默认)private同一类中√√√√同一包中√√√ 子类中√√ 不同包中√
二 继承:
概念:继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。
好处:1.提高了代码的复用性; 2.让类与类之间产生了关系,提供了另一个特征多态的前提。
注意:
子类中所有的构造函数都会默认访问父类中的空参数的构造函数,因为每一个子类构造内第一行都有默认的语句super();
如果父类中没有空参数的构造函数,那么子类的构造函数内,必须通过super语句指定要访问的父类中的构造函数。
如果子类构造函数中用this来指定调用子类自己的构造函数,那么被调用的构造函数也一样会访问父类中的构造函数。java中支持单继承,不直接支持多继承(通过接口实现)。
java支持多层(多重)继承,当要使用一个继承体系时:1.查看该体系中的顶层类,了解该体系的基本功能; 2.创建体系中的最子类对象,完成功能的使用。
对于继承,在我看来,就是一句俗语“老鼠的儿子会打洞”。老鼠的儿子继承了鼠父老鼠种族(属性)和打洞等技能(方法)。
public class ExtendTest {public static void main(String[] args) {MouseFather father = new MouseFather();System.out.println("鼠父有"+father.feet+"腿");father.daDong();father.show();MouseChild child =new MouseChild();System.out.println("鼠儿子有"+child.feet+"腿");child.daDong();child.show();}}class MouseFather{int line;MouseFather() { line=4;}int feet=4;void daDong(){System.out.println("打洞ing...");}void show(){System.out.println("尾巴有"+line+"cm长");}}class MouseChild extends MouseFather{}三 多态
函数本身就具备多态性,某一种事物有不同的具体的体现。
体现:父类引用或者接口的引用指向了自己的子类对象。
好处:提高了程序的扩展性。
弊端:当父类引用指向子类对象时,虽然提高了扩展性,但是只能访问父类中具备的方法,不可以访问子类中特有的方法。(前期不能使用后期产生的功能,即访问的局限性)
前提:1.必须要有关系,比如继承、或者实现; 2.通常会有覆盖操作。
在我看来,多态就是同一事物对于不同对象所做出的不同反应。但是,不能把函数重载理解为多态,因为多态是一种运行期的行为,不是编译期的行为。当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的该同名方法。
public class ExtendTest {public static void main(String[] args) {MouseFather father = new MouseFather();System.out.println("鼠父有"+father.feet+"腿");father.daDong();father.show();MouseFather child =new MouseChild();System.out.println("鼠儿子有"+child.feet+"腿");child.daDong();child.show();}}class MouseFather{int line;MouseFather() { line=4;}int feet=4;void daDong(){System.out.println("打洞ing...");}void show(){System.out.println("尾巴有"+line+"cm长");}}class MouseChild extends MouseFather{@Overridevoid daDong() {System.out.println("鼠儿新式打洞...");}}
- 黑马程序员学习日记——面向对象-封装
- 黑马程序员——学习日记之--面向对象总结
- 黑马程序员——学习日记之面向对象基础
- 黑马程序员——学习日记之面向对象特征
- 黑马程序员——(学习日记——面向对象)面向对象常见对象
- 黑马程序员————学习日记【6】 【Java面向对象2】
- 黑马程序员——学习日记2——面向对象
- 黑马程序员—Java入门学习日记基础篇-面向对象总结2
- 黑马程序员——C#面向对象基础复习日记
- 黑马程序员————学习日记【5】 【Java面向对象1】
- 黑马程序员————学习日记【7】 【Java面向对象3】
- 黑马程序员-- .Net学习日记——c#面向对象-方法
- 黑马程序员java学习日记——面向对象(二)
- 黑马程序员java学习日记——面向对象(三)
- 黑马程序员——学习日记5 java面向对象基础
- 黑马程序员——学习日记6 java面向对象之继承
- 黑马程序员——学习日记7 java面向对象之封装
- 黑马程序员——学习日记9 java面向对象之多态
- 【POJ3260】The Fewest Coins 多重背包+完全背包
- Android实现图片剪切圆形效果
- loadrunner 转换中文
- tomact如何配置域名,以本地主机为例
- 基于Adaboost算法的车牌检测在OpenCV上的研究与实现
- 黑马程序员——学习日记2——面向对象
- BOM&DOM基础
- quartz 定时任务
- 2015 软件开发笔试和面试题
- 国内外从事CV相关的企业
- pageX,clientX,offsetX,layerX的区别
- 查询SQL数据库中各数据表的空间使用情况
- 解决Python 不识别汉字的问题
- window下安装Xamarin(手动安装)