我之理解Java的四个基本特征

原创 2011年04月05日 15:49:00

抽象、封装、继承、多态性,这是Java(或者说面向对象的编程语言)的四个基本特征,尽管有人已经在说OOP快挂了,但是我们这些coder还是暂时不用考虑那么多,就像XP所倡导的——“只为今天,不考虑明天”

 

抽象,什么是抽象呢,我们知道绘画有抽象派、写实派,写实即是画的很逼真,跟真实事物很像,甚至就像照片一样,而抽象派则画的不那么容易让人认出了,虽然你大概还是猜得出这画的是一个人,但他只有鼻子和嘴巴,头还像S型一样扭着,更抽象的就是一片色彩,像是泼了各种颜色的油漆在上面,你看不懂,大师的画哪能让你轻易看懂呢,或者你也可以说看的懂,你说它是什么就是什么,只要你解释的通。现在我们来看程序里的抽象,我们可以定义一个Man类型,跟绘画里的抽象有几分相似,他只有鼻子和嘴巴,你或许会问,为什么没有眼睛、耳朵和其他一个人所应该具有的所有特征(器官)呢?The answer is:我们只需要鼻子和嘴巴,至少在目前。这就是抽象,抽取出事物中的特征,而且不是全部特征,是我们当前需要的,如果以后我们觉得应该给Man加上眼睛和耳朵,那我们再加上,除了特征,还有行为,既然Man有了nose和mouth,我们理所当然的认为他能闻味道和吃东西什么的,所以我们可以在往Man类里加上两个表示行为的smell()方法和eat()方法,有必要的话我们还可以让Man能够呼吸和讲话,但是不管你加了多少特征和行为进去,Man仍然不可能完全地完完整整的表示一个人,它始终是一个抽象的东西,就好比绘画不管是哪个门派,它其实都属于一门抽象的艺术,不管你画得多么惟妙惟肖、呼之欲出,它仍然只是一幅画而已,它所呈现的不是真实的事物,而只是它们的抽象,不同的只是抽象的方式、有多抽象而已。至于Java中用abstract关键字明确表示的抽象类和抽象方法,你大可以把它们当做Java中的抽象派画作,它们的具体实现自然就是写实派画作了。

 

封装,就像前面讲的,我们分析并抽取出一件事物的特征和行为(这些特征和行为应该都是针对我们当前需求或者我们预见今后要用到的),然后把它定义到一个类里,这即是封装,亦即我们可以说把特征和行为封装到一个类里,还有一个术语叫隐藏实现,当然封装肯定不是把所有东西都藏起来了,封的死死的,它会留一些接口出来,这样才能供我们使用,一个完全封死了的类是没有任何作用的,就像一台没有任何接口的裸机一样,没有软驱、光驱,没有USB接口,不能联网,这样一台电脑连操作系统都装不上,所以它没什么用(如果你硬要说可以用它来砸别人脑袋,那就算它还有点用吧)。如果真有这样一个类,不如把它定义为private,但实际上编译器都不准你这么做,甚至连protected都不行,除非是内部类,讲到内部类,这也是要封装的东东之一,是Java里一种比较高级的隐藏实现,通过内部类和接口可以实现多继承的效果。

 

继承,这个术语既好理解又容易让人困惑,有很多人说过我和我爸长的很像,还有很多人说我说话的方式和声音都很像我爸,看来我继承了不少我爸的特征和行为,也有一些人说我某一部分不像我爸而像我妈,那是不是可以说我同时继承了老爸和老妈的一些特征和行为呢,现实中是这样没错,不过在Java里只允许单个继承,也就是说一个类只能有一个基类(父类),多继承会让代码变得混乱,也许其他OOP语言可以多继承,但是这里只讨论Java,遇到上述我的情况,我可以把我定义为继承我老爸,毕竟我跟他更像一点,至于继承于我老妈的地方,那就只好采用覆写(override)的方式了,当然,这里只是简单的打个比方,如果真要为我建一个类型,可得好好设计一下,我没这么简单。继承最大的好处就在于大大增强了代码复用,基类里有的东西(除了private),派生类会继承下来,不用再重复相同的代码,但事实上,大师们告诉我们,真正用的最多的还是合成(composition),而且应尽量考虑合成而不是继承的方式,一般来说关键是分清"is-a"和"has-a"的区别,前者用继承,后者用合成。

 

多态性,说到多态性,这是和继承、接口和实现密切相关的,继承可以让你把多个派生类都当做一个基类来处理,这正是多态性的体现,最常被举的一个例子就是Shape(形状),可以想见它下面能派生出很多类型,Triangle、Square、Pentagon、Hexagon,每个类都覆写了Shape类中的draw()方法,可以分别画出三角形、正方形、五角形、六边形,这时有一个Shapes类,它有一个方法可以画出所有的Shape,这个方法即draw(Shape x),通过upcasting(上传,将派生类转换成基类),我们可以传入任何派生于Shape的子类作为参数,然后方法里会自动调用这些子类的draw方法,它们是在运行时才被确定的,假使没有这种多态性,那我们就得在Shapes类里为每个派生类单独写一个draw()方法,如draw(Triangle x)、draw(Square x)……要是我们再多一些派生类:Circle、Echelon等等等等,那Shapes类就会不断地膨胀膨胀,撑死了。基于这种多态性,我们可以定义Shape a = new Triangle(); Shape b = new Pentagon();等等,编译器不会报错,并且这样的定义方式是被鼓励的。接口和它们的实现类在多态性上的体现则是和继承一致的。

java的四大特征

抽象: 我们去定义一个类的时候,实际就是把一类的事物的公共的属性和行为提取出来,形成一个物理的模型。 封装: 把抽象出来的数据和对数据的操作封装在一起,数据被保护在内部,程序的其他部分只有通过授...
  • lsn946803746
  • lsn946803746
  • 2015年06月09日 21:37
  • 860

Java面向对象的四个特征

Java面向对象的四个特征:抽象、继承、封装、多态性 抽象:忽略主题全部不打算把全部事件描述下来,只是抽取主要部分抽象化描述,可以理解抽象是一个接口类或一个抽象类!             比如:...
  • liaohongqing_55
  • liaohongqing_55
  • 2017年02月09日 14:42
  • 516

操作系统知识点总结1

多道程序执行分为:顺序执行和并发执行;顺序执行可再现,并发执行(伪并发)不可再现。 程序的顺序执行四个特征:1.顺序性;2.封闭性;3.程序执行结果的确定性;4.程序执行结果的可再现性。 程序的并...
  • tianyucad123
  • tianyucad123
  • 2016年07月25日 21:55
  • 405

面向对象的4个基本特征

上个周末霸笔大唐移动的应用程序软件工程师试题,有一道面向对象的4个特征,以前都是接触的三个,怎么多出了一个?原来就是抽象性。。。面向对象的4个基本特征 在上述面向对象的基本概念基础之上,不可避免地要涉...
  • wuxinyicomeon
  • wuxinyicomeon
  • 2010年11月03日 10:17
  • 3986

深入理解Java面向对象的三大基本特性

一、继承1.概念:一个类继承另一个类,则称继承的类为子类,被继承的类为父类。2.目的:实现代码的复用。3.理解:子类与父类的关系并不是日常生活中的父子关系,子类与父类而是一种特殊化与一般化的关系,是i...
  • henanchina
  • henanchina
  • 2010年01月28日 14:55
  • 6641

Java面向对象的四个基本特征

Java面向对象的四个基础特征 抽象:抽象是将一类对象的共同特征总结出来构造成类的过程,包括数据抽象和行为抽象,抽象只关注对象有哪些属性和行为,并不关注行为的细节。 封装:将数据和操作数据的方法包...
  • calledWWW
  • calledWWW
  • 2018年02月04日 00:31
  • 25

浅谈操作系统的四个特征

操作系统有四个特征:并发,共享,异步,虚拟。并发:是指两个或多个事件在同一时间间隔内发生。操作系统的并发性是指计算机系统中同时存在多个运行着的程序,因此它应该具有处理和调度多个程序同时执行的能力。在这...
  • yuanzhijing
  • yuanzhijing
  • 2016年06月22日 16:44
  • 2920

Java学习之面向对象三大特征通俗理解

Java的三大特性:封装、继承和多态。 封装: 首先,属性可用来描述同一类事物的特征, 行为可描述一类事物可做的操作,封装就是要把属于同一类事物的共性(包括属性与行为)归到一个类中,...
  • u012527802
  • u012527802
  • 2015年10月30日 10:59
  • 2121

面向对象的三个基本特征(封装)

面向对象的三个基本特征是:封装、继承、多态 封装 : 百度上解释的方法为: 前面有private 修饰的【属性】或者是【方法】, 不能【直接】被外部类的实例化对象访问,这样就是封装。 封装是...
  • pgx115
  • pgx115
  • 2017年07月17日 10:14
  • 132

Java对象的四个基本特性

抽象:把客观事物用代码抽象出来,包括两种抽象:第一种是数据抽象,也就是对象的属性。第二种是过程抽象,也就是对象的行为特征。 封装:把客观事物封装成抽象的类,对不可信的对象隐藏,对可信的对象或者类进行...
  • qq_32519097
  • qq_32519097
  • 2016年09月26日 21:29
  • 1126
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:我之理解Java的四个基本特征
举报原因:
原因补充:

(最多只允许输入30个字)