Java面向对象三大特征怎么样轻松理解?
2016-09-12 13:46
288 查看
转自:http://zhidao.baidu.com/link?url=BlYiY8Trnu-_keSMzigfU5FrW5k3sUhdE2Xjtx3aZHVItWY9PN0fe_DHD9X0reMMGQERgpTIasOWmE_INXMGda http://blog.csdn.net/zhangyabinsky/article/details/7059818
5.构造对象过程 (1)分配空间 (2)递归地构造父类对象 a. 父类 初始化属性 b. 父类 构造方法 (3)初始化属性 (4)调用构造方法 6.super 用法: super() 调用父类的构造方法,只能出现在构造方法的第一行 super.方法名 super表示父类的对象,通过它去调用父类的方法 注意:在写类的时候,一定要写默认无参的构造方法,如果一个构造方法的 第一句既不是this(),也不是super()时,那么就会在这里隐含的调用 他的父类的无参的构造方法,即隐含的有super()。三、多态 运行时多态。 子类的对象放在父类的引用中,例如 Animal a=new Dog,子类对象当父类对象来使用。 1.多态原则: (1)对象类型不变 (2)只能用引用调用其引用类型中定义的方法 (3)运行时,根据对象的实际类型去找子类覆盖之后的方法 例子: 有Animal类中有eat()和sleep()两个方法,sleep()中睡8小时;子类Dog中有 eat()方法,sleep()方法中睡6小时,还有wangwang()方法。 现创建Animal a=new Dog(); 不能调用a.wangwang(),调用a.sleep()输出睡6小时。 2.对象的强制转换 格式: 引用 instanceof 类型 引用所指的对象是否与类相符,返回值boolean值。 用法: Animal a=new Cat(); if(a instanceof Dog) { Dog d=(Dog)a; d.wangwang(); } 说明:如果只有Dog d=(Dog)a;运行时错误,因为a是Cat而不是Dog (多态原则第一条) 3.多态的灵活变换 (1)用于参数列表上: public void m(A a){} 可以用A类的任何子类对象作为参数 (2)用在返回值上: public A m(){} 这个方法可能返回A类的任何子类对象
封装: 首先,属性可用来描述同一类事物的特征, 行为可描述一类事物可做的操作,封装就是要把属于同一类事物的共性(包括属性与行为)归到一个类中,以方便使用.比如人这个东东,可用下面的方式封装: 人{ 年龄(属性一) 身高(属性二) 性别(属性三) 做事(行为之一) 走路(行为之二) 说话(行为之三) } 继承: 由于封装,使得有共同特征的一类事物的所有描述信息都被归于一类之中,但我们知道,这并不是万能的,有些事物有共性,但还存在区别,比如教师,简单封装起来如下: 教师{ 年龄(属性一) 身高(属性二) 性别(属性三) 做事(行为之一) 走路(行为之二) 说话(行为之三) 教书(行为之四) } 上面对"教师"的封装,与对"人"的封装基本上差不多,只是多了一个特征行为:教书, 教师有与人一样的共性, 但我们不能说"人教书",也就是不能把教书封装到"人"之中去,教书是教师的特征行为之一. 为了省事地封装教师(代码的复用,这只是继承存在的原因之一), 可以让教师去继承人,如: 教师 extends 人{ 教书(行为之三) } 这样,我们就不用重新定义那些已经被"人"这一个类所封装的那些属性与行为了,而只需要使用继承的方式,在人的基础上拓展教师专有的行为,即"教书"即可把教师描述出来;这样的结果, 即是教师也同时拥有"人"之中所封装的一切属性与行为, 还拥有自己的特征行为"教书". 多态: 多态的概念发展出来,是以封装和继承为基础的(其实我觉得抽象也应该算是面向对象的大特征之一,要封装,抽象是必须的) 简单的理解一下多态,比如: 人这个类,封装了很多人类共有的特性, 教师是人的子类,继承了人的属性与行为,当然教师有自己的特征行为,比如教书授课; 学生是人的子类,继承了人的属性与行为,当然学生有自己的特征行为,比如学习做作业; 现在,当我们需要去描述教师与学生各自的行为的时候, 我们可以分开来说"教师在授课", "学生做作业", 但如果我们要站在抽象的角度, 也就是从教师与学生的父类"人"的角度, 来同时描述他们各自的行为时,我们怎么描述?"人在授课"?"人在做作业"?这是不是怪怪的很不合适?不合适的问题就在于, 对于行为主体,我们使用了抽象层次的东东"人",而对于行为本身, 我们却使用了具体的东东"授课"与"教书". 怎么解决呢? 那就需要解决抽象与具体的矛盾问题. 既然是站在抽象在角度来描述,那我们把行为抽象一下,不就能同时描述了吗?比如"人在做事"(教师授课与学生做作业都可以说成人在做事),这样就解决了抽象层次与具体层次之间的矛盾. 到了这一步, 我们可以把两个描述: "教师在做事", "学生在做事" 两者统一为"人在做事", 然后, 我们可以在"教师"的"做事"行为中去调用教师自己的特征行为"授课", 在"学生"的"做事"行为中去调用学生自己的特征行为"做作业", 所以,当调用"人"去"做事"的时候,如果这个人是教师,那他所做的事实际上就是"教书", 如果这个人是学生,那他所做的事实际上就是"做作业". 也就是说在这里"人"是多态的, 在不同的形态时,特征行为是不一样的, 这里的"人", 同时有两种形态,一种是教师形态,一种是学生形态,所对应的特征行为分别是"授课"与"做作业". 完成上述的描述过程, 其实就是多态机制的体现. 多态, 就是站在抽象的层面上去实施一个统一的行为,到个体(具体)的层面上时, 这个统一的行为会因为个体(具体)的形态特征而实施自己的特征行为. 多态比起封装与继承来说要复杂很多, 上面的描述很简单, 不用去死抠多态两个字, 其实只要明白: 能站在抽象的角度去描述一件事, 而针对这件抽象的事, 对于每个个体(具体)又能找到其自身的行为去执行, 这就是多态.
转载,原文来自http://blog.sina.com.cn/s/blog_5f79a56a0100c6ig.html众所周知,java中的面向对象的三大基本特征是:【封装】、【继承】、【多态】一、封装 对象要有一个明确的边界;边界的划分(对象各司其职、对象的粒度、对象的可重用性) 具体来说: 1.属性: 私有 private(提供set和get方法) 2.方法: 公开或私有public/private 3.方法声明 --> 公开 方法实现 --> 隐藏 实现改变时,对对象的使用者没有影响。 二、继承 共性放到父类,特性放到子类;子类,父类 --> 其实就是特殊 --> 一般 1.关键字: extends 例如:Dog extends Animal{} 2.java中一个类最多只能有一个直接的父类,即单继承(具有简单性、树形结构), C++中是单继承 java中要实现多继承,通过接口来实现。 3.父类中所有属性和方法都能继承给子类;父类中的私有方法不能继承给子类。 4.java中的访问修饰符
访问修饰符 | 访问权限 | 继承 |
private | 本类内部 | 不能继承 |
default | 本类+同包 | 同包子类可以继承 |
protected | 本类+同包+不同子包 | 可以继承 |
public | 公开 | 可以继承 |
相关文章推荐
- Java面向对象三大特征怎么样轻松理解`?
- java中对面向对象的三大特征:封装、继承、多态的理解
- java基础(四)探探对面向对象三大特征之一 ——继承的理解
- Java学习之面向对象三大特征通俗理解
- java基础(三)探探对面向对象三大特征之一 ——多态 的理解
- Java中面向对象三大特征总结
- 黑马程序员——java中面向对象的三大特征
- Java面向对象的三大基本特征:继承、封装与多态
- 第三十一、Java面向对象三大特征之多态
- java面向对象的三大特征:封装,继承,多态
- java基础复习2(面向对象 三大特征 内存机制)
- 1.为什么需要继承?如何继承?继承到什么? 2.方法的重载与重写的区别 3.类型的自动转换和强制转换 4.子类特有的方法的调用规则 5.子类重写的方法的调用规则 6.多态的理解 7.面向对象的三大特征
- [Java入门笔记] 面向对象三大特征之:封装
- java中的面向对象的三大基本特征
- java面向对象三大特征--基本概念
- Java中面向对象三大特征总结
- Java 面向对象三大特征之一:封装
- Java基础:面向对象三大特征、五大原则
- java基础第五讲——访问修饰符、面向对象三大特征、包装类、关键字
- java面向对象的三大基本特征之封装,继承,多态