-------android培训、java培训、期待与您交流! ----------
主要内容:
一、面向对象概念
二、类与对象的关系
三、面向对象的主要特征
四、成员变量与局部变量的区别
五、匿名对象
六、构造函数和构造代码块
七:几个关键字(private this static)
面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。
(1)面向对象是相对面向过程而言
(2)面向对象和面向过程都是一种思想
(3)面向过程 : 强调的是功能行为
面向对象 :将功能封装进对象,强调具备了功能的对象。
(4)面向对象是基于面向过程的。
1.2面向对象的特点:
是一种符合人们思考习惯的思想,可以将复杂的事情简单化,将程序员从执行者转换成了指挥者。
完成需求时:
如果该对象不存在,那么创建一个具有所需功能的对象。
这样简化开发并提高复用。
二、类与对象的关系
类:对现实生活中事物的描述,它将数据以及这些数据上的操作封装在一起。
对象:就是这类事物,实实在在存在的
类是对象的抽象,而对象是类的具体实例。类是抽象的,不占用内存,而对象是具体的,占用存储空间。类是用于 创建对象的蓝图,它是一个定义包括在特定类型的对象中的方法和变量的软件模板。
映射到java中,描述就是class定义的类。具体对象就是对应java在堆内存中用new建立实体。
三、面向对象的主要特征
计算机软件系统是现实生活中的业务在计算机中的映射,而现实生活中的业务其实就是一个个对象协作的过程。面向对象编程就是按现实业务一样的方式将程序代码按一个个对象进行组织和编写,让计算机系统能够识别和理解用对象方式组织和编写的程序代码,这样就可以把现实生活中的业务对象映射到计算机系统中。
面向对象的编程语言有封装、继承 、抽象、多态等4个主要的特征。
封装:
封装是保证软件部件具有优良的模块性的基础,封装的目标就是要实现软件部件的“高内聚、低耦合”,防止程序相互依赖性而带来的变动影响。在面向对象的编程语言中,对象是封装的最基本单位,面向对象的封装比传统语言的封装更为清晰、更为有力。面向对象的封装就是把描述一个对象的属性和行为的代码封装在一个“模块”中,也就是一个类中,属性用变量定义,行为用方法进行定义,方法可以直接访问同一个对象中的属性。通常情况下,只要记住让变量和访问这个变量的方法放在一起,将一个类中的成员变量全部定义成私有的,只有这个类自己的方法才可以访问到这些成员变量,这就基本上实现对象的封装,就很容易找出要分配到这个类上的方法了,就基本上算是会面向对象的编程了。把握一个原则:把对同一事物进行操作的方法和相关的方法放在同一个类中,把方法和它操作的数据放在同一个类中。
例如,人要在黑板上画圆,这一共涉及三个对象:人、黑板、圆,画圆的方法要分配给哪个对象呢?由于画圆需要使用到圆心和半径,圆心和半径显然是圆的属性,如果将它们在类中定义成了私有的成员变量,那么,画圆的方法必须分配给圆,它才能访问到圆心和半径这两个属性,人以后只是调用圆的画圆方法、表示给圆发给消息而已,画圆这个方法不应该分配在人这个对象上,这就是面向对象的封装性,即将对象封装成一个高度自治和相对封闭的个体,对象状态(属性)由这个对象自己的行为(方法)来读取和改变。一个更便于理解的例子就是,司机将火车刹住了,刹车的动作是分配给司机,还是分配给火车,显然,应该分配给火车,因为司机自身是不可能有那么大的力气将一个火车给停下来的,只有火车自己才能完成这一动作,火车需要调用内部的离合器和刹车片等多个器件协作才能完成刹车这个动作,司机刹车的过程只是给火车发了一个消息,通知火车要执行刹车动作而已。
抽象:
抽象就是找出一些事物的相似和共性之处,然后将这些事物归为一个类,这个类只考虑这些事物的相似和共性之处,并且会忽略与当前主题和目标无关的那些方面,将注意力集中在与当前目标有关的方面。例如,看到一只蚂蚁和大象,你能够想象出它们的相同之处,那就是抽象。抽象包括行为抽象和状态抽象两个方面。例如,定义一个Person类,如下:
class Person
{
String name;
int age;
}
继承:
在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并可以加入若干新的内容,或修改原来的方法使之更适合特殊的需要,这就是继承。继承是子类自动共享父类数据和方法的机制,这是类之间的一种关系,提高了软件的可重用性和可扩展性。
多态:
多态是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。多态性增强了软件的灵活性和扩展性。例如,下面代码中的UserDao是一个接口,它定义引用变量userDao指向的实例对象由daofactory.getDao()在执行的时候返回,有时候指向的是UserJdbcDao这个实现,有时候指向的是UserHibernateDao这个实现,这样,不用修改源代码,就可以改变userDao指向的具体类实现,从而导致userDao.insertUser()方法调用的具体代码也随之改变,即有时候调用的是UserJdbcDao的insertUser方法,有时候调用的是UserHibernateDao的insertUser方法:
UserDao userDao = daofactory.getDao(); userDao.insertUser(user);
比喻:人吃饭,你看到的是左手,还是右手?面向对象开发的特征:
- 成员变量定义在类中,在整个类中都可以被访问。
- 成员变量随着对象的建立而建立,存在于对象所在的堆内存中。
- 成员变量有默认初始化值。
- 局部变量只定义在局部范围内,如:函数内,语句内等。
- 局部变量存在于栈内存中。
- 作用的范围结束,变量空间会自动释放。
- 局部变量没有默认初始化值。
- 当对对象方法仅进行一次调用的时
- 匿名对象可以作为实际参数进行传递
class Car { //描述颜色 String color = "红色"; //描述轮胎数 int num = 4; //运行行为。 void run() { System.out.println(color+".."+num); } }
class CarDemo { public static void main(String[] args) { new Car().num = 5; new Car().color = "blue"; new Car().run(); //匿名对象使用方式一:当对对象的方法只调用一次时,可以用匿名对象来完成,这样写比较简化并且用匿名对象调用属性是没有 //意义的。
//如果对一个对象进行多个成员调用,必须给这个对象起个名字。
Car q = new Car(); show(q); //show(new Car()); //匿名对象使用方式二:可以将匿名对象作为实际参数进行传递。 } //需求:汽车修配厂。对汽车进行改装,将来的车都改成黑车,三个轮胎。 public static void show(Car c) { c.num = 3; c.color = "black"; c.run(); } }
六、构造函数和构造代码块- 是一个权限修饰符。
- 用于修饰成员(成员变量和成员函数)
- 被私有化的成员只在本类中有效。