A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

   我曾经遇到过学完Java课程还没有弄懂面对对象,还要去书店买书的的同学。所以在面对对象这方面我也特用心,一直寻求一个的答案,在和室友激烈的讨论之后结合我所学的书本整理如下。
    面对对象是一种思想,而对象是什么?
   我们可以说万物皆对象,也就是我们客观世界中存在的人,事和物体等。是其对同一类食物的总称,既面向对象中的类(class);
   那么对象和类之间的关系是什么?
  对象就是符合某种类定义所产生的实例(instance);我们习惯用类名称呼生活中的对象,但是实际上看到的还是对象的实例,而不是一个类。
   例:我们看到的某个人,这个人虽然是一个类名。但实际上我们看得见的是一个实例的对象,而不是人类。你可以说这个人属于人类,但是不能解释人类是这个人。所以我们可以说,类是一个抽象的称呼,而对象则是与现实生活中的事物相对应的实体。
   在现实生活中,只是使用类或对象并不能很好的描述一个事物。
   例:
       某天你看到一个美女,然后回到宿舍跟室友说:路上看到一美女,这时室友肯定不知道美女是什么样的,然后你有说:长头发,身材超棒,眼睛大大的,就像某某明星。那么长头发,标准的身材我们可以理解为她的属性。然后你又说:我跟她说话了,她一说话我就激动了,俺们山东口音,一问俺们还是老乡。都是济南的。这里的山东话就是对象的方法。所以说对象具有属性和方法。而在面向对象程序的设计中,使用属性来描述对象的状态,使用方法来处理对象的行为。
  那么什么是面向对象的编程呢?
   提到面向对象,自然就会想到面向过程,面向过程是分析出解决问题所需要的步骤,然后用函数把这些步骤一一实现,使用的时候一个一个一次调用就可以了。
   而面向对象是吧解决的问题根据一定的规则划分成多个独立的对象,然后通过调用对象的方法来实现问题的求解,一个应用模块通常会包含多个对象,通过多个对象的互相配合来实现应用模块的功能,这样做的好处是当应用模块功能发生变化时,只要修改个别的对象就可以了。这样做更容易维护代码,同时,对象间的联系性也比较小,可以充分实现代码的复用。这就是面向对象程序设计被广泛采用的重要原因。
   例生产汽车:每生产100辆的时候需要两辆红色汽车,我们在生产过程中只需要用new方法new两个汽车,其属性是红色。而其他属性就不需要去改变。
              面向过程的特点,
     面向对象编程更加符合人的思维模式,可以将程序需要的内容定义为类。更重要的是,面向对象编程更有利于系统开发时责任的分工,能有效的组织和管理一些比较复杂的应用程序的开发。面对对象程序设计的特点可以概括为:

      封装性,继承性和多态性;

   1:封装性

  封装是面向对象编程的核心思想,是将对象的属性和行为封装起来,而将对象的属性和行为封装起来的载体就是类。类对客户隐藏其实现的细节。这就是封装的思想。

  采用封装的思想保证了类内部数据结构的完整性。应用该类的用户不能轻易直接操作此数据结构,只能执行类允许公开的数据。这样就避免了外部对内部数据的影响,从而提高程序的可维护性。

2.继承性,

  类与类之间同样具有一定关系,两类之间这种关系称作是关联,关联是描述两个类之间的一般二元关系。两个类之间的关系有很多种,继承是其中一种。

  继承性主要是利用特定对象之间的共有属性,也就是子类的实例是父类的实例,但是不能说父类的实例是子类的实例,

举例:图形之间的继承关系

                              图形类                                                  //父类

       四边形          圆形           三角形          。。。。。N边行              // 子类

平行四边形           圆形            等边三角形             不规则图形

长方形                                等腰三角形                                  //子类

3.多态性:

     多态性是面向对象编程中的又一个重要特性:它是指在基类(或者说父类)中定义的属性和方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为,这使得同一个属性和方法在基类及其各个子类中具有不同的语义。

   多态性丰富了对象的内容,扩大了对象的适应性,改变了对象单一的继承关系:

例:

定义一个动物类Animal,该类中存在一个指定动物行为的方法cry(),及调用方法的doCry(Animal a)方法,其中,在doCry(Animal a)方法中,只有一个代码“a.cry();”,再定义两个动物类的子类,狗类Dog和猫类Cat,这两个类都具有cry()方法,并且都进行了相应处理,

    动物园类                                                   动物园类

     Zoo                   调用动物类的                         Animal

   +main()             cry(Animal a)方法                        +cry()

                                                           +doCry(Animal a)

                                                           /            \

                                                       狗类            猫类

                                                      Dog              Cat

                                                     +cry ()           +cry()

   在动物园类中执行doCry(animal)方法时,如果参数为Animal类型,则会输出“动物发出的叫声!”;如果参数为Dog类型时,则会输出“狗发出‘汪汪。。。。。’声,字符串;如果参数为Cat类型,那么输出“猫发出‘喵喵。。。。’声”字符串。由此得出:在doCry(Animal a)方法中,根本不用判断应该去执行那个类的cry()方法,因为编辑器会自动根据所传递的参数进行判断,这就是动态绑定,既根据运行时对象的类型的不同执行不同的操作。

   多态性丰富了对象内容,扩大了对象的适应性,改变了对象单一继承的关系。

  总结:

      面向对象是一种思想,最初起源于20世纪中期的仿真程序设计语言Simula。面向对象思想将客观世界中的事物描述为对象,并通过抽象的思维方法将需要解决的实际问题分解成人们已于理解的对象模型,然后通过这些对象模型构建应有的应用程序的功能,它的目标是开发出能够反映现实世界某个特定片段是程序。

      

评分

参与人数 2技术分 +3 收起 理由
天黑偷牛 + 2 总结的灰常好
付江涛 + 1 很给力!

查看全部评分

6 个回复

正序浏览
看看,学习下、、、
回复 使用道具 举报
总结的很好,学习了
回复 使用道具 举报
学习了。。
回复 使用道具 举报
很鲜活的例子,比书上容易理解和接受。
喜欢!赞一个!
回复 使用道具 举报
不错,感谢分享!
回复 使用道具 举报
学习了,刚好在学面向对象这一块
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马