1.面向对象的思想
1.面对对象的基本概念:是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,简称OO (Object-Oriented)方法,是建立在"对象"概念基础上的方法学。对象是由数据和容许的操作组成的封装体,与客观实体有直接对应关系,一个对象类定义了具有相似性质的一组对象。而类的继承性是对具有层次关系的类的属性和操作进行共享的一种方式。所谓面向对象就是基于对象概念,以对象为中心,以类和继承为构造机制,来认识、理解、刻画客观世界和设计、构建相应的软件系统。
面向对象就是将编程当成是一个事物,对外界来说,事物是直接使用的,不用去管他内部的情况。而编程就是设置事物能够做什么事。举作菜为例,其实面向过程就好像你是个厨师,要自己炒菜,所以要讲究步骤,而面向对象就好像你是个食客,你只要通知厨师作菜,即发一个消息就可以了,至于厨师怎样作菜,是不用知道的。面向对象顾名思义就是把现实中的事务都抽象成为程序设计中的“对象”,其基本思想是一切皆对象,是一种“自下而上”的设计语言,先设计组件,再完成拼装。
面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为
2.类的概念
类是人们对于客观事物的高度抽象,面向对象方法中的类是一种类型,它是具有相同属性和行为的对象的集合。类是具有相同属性和行为的若干对象的模板。类为属于该类的全部对象提供了抽象的描述,这种描述包括了属性和行为两大部分。
类就是同一类事物的总称,比如我本身这个对象可以讲话,那么基本上所有人都具备这个方法,就将我这一类的对象称为类,类的思想就是这样产生的。更恰当的描述:类就是世间事物的抽象称呼,而对象就是这个事物相对应的实体,人类就是一个类,而你我就是个实例,即对象;这也是为什么人类里面有个类,动物类,植物类,都有一个类,单说一个动物类,我们只能知道是动物,却无法确定是那种动物,而对象就是具体实例化动物。在java语言中,类中对象的行为是以方法的形式定义的,对象的属性是以成员变量的形式定义的,而类包括对象的属性和方法。
3.对象的概念
现实世界中,任何事物都是对象,对象是事物存在的实体,比如人,桌子,电脑,空气,思想。在计算机的世界中,面对对象程序设计的思想要以对象来思考问题,首先要将现实的实体抽象为对象,然后考虑这个对象所具备的属性和行为,如我们的手机,就是一个对象,将手机抽象为对象,然后识别这个对象的属性,对象具备的属性都是静态属性,比如手机的尺寸,材质,颜色等等,接着识别这个对象的动态行为,如打电话,拍照等等。当识别出这个对象的属性和行为后,这个对象就被定义完成了,然后可以根据再根据各种手机的特点,将这些手机共有的属性和行为封装起来来描述手机,由此可见,类实质上就是封装对象属性和行为的载体,而对象则是类抽出来的一个实例。
4.封装
隐藏对象的属性和实现细节,仅对外提供公共访问方式,将变化隔离,便于使用,提高复用性和安全性。封装性就是尽可能的隐藏对象内部细节,对外形成一道边界,只保留有限的接口和方法与外界进行交互。简单意思就是指把内部的实现隐藏起来,然后只暴露必要的方法让外部调用。
好处:将描述事物的数据和操作封装在一起,形成一个类;被封装的数据和操作只有通过提供的公共方法才能被外界访问(封装隐藏了对象的属性和实施细节),私有属性和方法是无法被访问的,表现了封装的隐藏性,增加数据的安全性。
关键字
private:私有的
可以修饰的内容:成员变量、成员方法、内部类
修饰之后的后果:只能在本类中访问,在其他类中不可以访问
getter和setter
当属性被私有化,外界无法直接访问,则需要通过公共的访问方式,让外界可以间接来访问属性。一般规定:get获取属性值,set设置属性值。
this关键字
this:表示当前类型当前对象的引用,哪个来调用this所在的方法,this就代表哪个对象。
作用:可以区分局部变量和成员变量,当变量没有this修饰,则遵循就近原则。
就近原则:当访问某个变量名的时候,会优先寻找最近的访问变量名的定义,如果没有找到就去更远的地方寻找。
当局部变量和成员变量重名的时候,一定是先试用局部变量定义的变量,如果没有,才会使用成员变量。
5.继承
关键字
extends:扩展、增加、继承。
super代表的父类的引用。
子类的对象拥有父类的全部属性与方法,称作子类对父类的继承。
继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。通过使用继承我们能够非常方便地复用以前的代码,能够大大的提高开发的效率。
继承所描述的是“is-a”的关系,如果有两个对象A和B,若可以描述为“A是B”,则可以表示A继承B,其中B是被继承者称之为父类或者超类,A是继承者称之为子类或者派生类。
实际上继承者是被继承者的特殊化,它除了拥有被继承者的特性外,还拥有自己独有得特性。例如猫有抓老鼠、爬树等其他动物没有的特性。同时在继承关系中,继承者完全可以替换被继承者,反之则不可以,例如我们可以说猫是动物,但不能说动物是猫就是这个道理,其实对于这个我们将其称之为“向上转型”。
好处:提高了代码的复用性
提高了代码的可维护性,是多态的前提。
在这里我们需要明确,继承存在如下缺陷:
1、父类变,子类就必须变。
2、继承破坏了封装,对于父类而言,它的实现细节对与子类来说都是透明的。
3、继承是一种强耦合关系。
6.抽象类
我们创建一个动物类,并且在这个类中创建动物对象,但是当你提到动物类,你并不知道我说的是什么动物,只有看到了具体的动物,你才知道这是什么动物,所以说动物本身并不是一个具体的事物,而是一个抽象的事物。只有真正的猫,狗才是具体的动物,同理我们也可以推理不同的动物,他们的行为习惯应该是不一样的,所以我们不应该在动物类中给出具体体现,而是给出一个声明即可。