java基础-面向对象的思想

一.什么是面向对象

  面向对象是一种思想,在java中通常我们会说一句话一切事物即对象。而面向对象到底是怎么回事呢?这里我从人们对问题的思考来阐述,人在思考的一个问题的时候比如在解决一个数学问题的时候我们会第一步干什么接着我们干什么,而这种思想和我们的面向对象的思想是相反的。这种是面向过程的思想。而我们所说的面向对象的思想是首先考虑的是我们的这个问题域中都有哪些的对象,对象与对象之间的关系我们抽象出来。而面向对象的思想更符合人们的思考方式,因为我们眼睛中看到的就是一个一个的对象。

二.对象和类的概念

  对象:对象是对客观事物的抽象。在生活中万物皆对象,比如眼前的这个杯子就是一个对象。对象是用于计算机语言对问题域中的描述。对象通过属性和方法来分别对应事物所对应的静态属性和动态属性。

  类:类是对对像的抽象。类中定义了这一类对象所具有的静态属性和动态属性。类可以看成一类对像模板,对象可以看成该类的一个具体的实例。

  e.g.什么是冰箱?

    具有某些类特征的东西就是冰箱,它的颜色,高度,宽度,品牌,型号,可以制冷和制热,所有冰箱这里只是一类事物的一个抽象。这个只是让你知道冰箱就是这么一类东西,它是抽象的出来的一类事物。而我眼前的这一个红色的海尔品牌的冰箱就是一个具体的对象,所以说符合这类事物具体的特征的某一个东西就叫做一个对象。冰箱是一个类,某一个具体的冰箱就是冰箱这个类里面的一个对象。

三.类与对象之间的关系(关联关系、继承关系、聚合关系、实现关系)

  1.关联关系

    关联关系反应到代码上往往是一个类的方法里面的参数是另一个类的具体的某一个对象,比如教授教研究生,教哪个研究生,教是教授这个类里面的一个方法,某个研究生是研究生这个类里面的一个具体的对象。关联关系是最弱的一种关系,咱们两个类之间有关系,或者两个对象之间有关系,但关系不是很紧密。

  2.继承关系(java中是单继承和多实现 XX是一种XX

    继承关系封装了这样一种逻辑:“XX是一种XX”,只要这东西能说通了,就可以考虑用继承关系来封装它如:游泳运动员从运动员继承,游泳运动员是一种运动员,这能说得通,所以游泳运动员就是从运动员继承过来的,游泳运动员和运动员就是一种继承关系。学生是一个人,学生从人继承,老师是一个人,老师也从人继承,学生是一种老师,这说不通,所以学生和老师就不存在继承关系。所以将来做设计的时候要分清继承关系很简单,你只要说通这么一句话:“XX是一种XX”。OK,那他们之间就是继承关系。篮球运动员是一种球类运动员,这说得通,所以篮球运动员从球类运动员继承,这样继承很有可能会产生一棵继承树,运动员派生出来,派生出来的意思是游泳运动员这个类、球类运动员这个类、射击运动员类从它继承,相当于运动员派生出来了这些个不同的运动员,包括游泳的,球类的,射击的。球类的再派生足球的,篮球的,排球的。这就是一棵继承树,不过这棵树是比较理想化的情况,只有一个根节点。但实际当中,我们真实世界当中的继承关系不一定只从一个类继承,一个类可能从多个类继承过来,比如说:金丝猴从动物这个类继承,这很正常,但我还有另外一个专门的类:“应该受到保护的东西”,这也是一个类,金丝猴应该受到保护,所以金丝猴是一种应该受到保护的东西。所以金丝猴从“应该受到保护的东西”这个类继承过来。所以在现实情况当中,一个类完完全全有可能从多个不同的类继承,C++正是因为想封装这种继承关系,所以C++存在多重继承。

  3.聚合关系(聚集关系和组合关系  XX是XX的一部分

    什么是聚合?聚合就是一个整体与部分的关系。我们说“XX是XX的一部分”,只要说得通,那么他们之间的关系就是聚合关系,队长是球队的一部分,队员是球队的一部分。所以队长和球队是聚合关系,队员和球队也是聚合关系。脑袋是人的以部分,身体和胳膊也是人的一部分,因此脑袋,身体和胳膊与人都是聚合关系。聚合关系分得再细一点的话就可以分成聚集关系和组合关系,比如球队、队长,队员,这三者是聚集关系,假如这个队长既是足球的队长,同时也是篮球的队长,一个人分属两个不同的球队,这是可以的,球队与队长之间没有我离不了你,你离不了我这种情况,所以如果分得更细的话,这种就叫做聚集关系。还有一种情况叫组合,组合说的是咱们俩密不可分,我是你必不可少的一部分。一个人的脑袋不可能既属于你又属于别人,身体也一样,不可能既属于你又属于别人。所以你的身体,脑袋和你是密不可分的,这是一种更加严格的聚合关系,专门给它取了个名字叫组合。

  4.实现关系

    作为父类来说,我觉得我应该具有这样一个方法,但我不知道怎么去实现,谁去实现,我的子类去实现,这就是实现关系。

  5.多态

    父类的引用指向子类的实现

 四.java的封装

  将类中的一些信息隐藏起来对外提供一个公共的接口。

  属性前+private:该属性只能在当前类内部被访问;

  在类外对private属性访问需要:创建getter/setter操作接口取值和赋值。

  封装的好处:

  1、首先,封装隐藏内部属性,并对对象使用这隐藏了数据的实现方式,保护内部状态

  2、封装的关键是绝对不能让类中的方法直接访问其他类的实例域,防止对象间的不良交互,提高代码的模块化和安全性

  3、封装为对象提供了黑箱的特征,增加代码的可维护性和可靠性。即一个类可以任意的改变存储数据的方式,只要仍旧使用相同的方法操作数据,那么其他

  类就不知道或者介意这种变化

  

猜你喜欢

转载自www.cnblogs.com/zylv/p/10095079.html