面向对象:
- 面向对象是相对面向过程而言;
- 面向对象和面向过程都是一种思想;
- 面向过程,强调的是功能行为
- 面向对象,将功能封装进对象,强调具备了功能的对象;
- 面向对象是基于面向过程的。
面向过程和面向对象:
面向过程的角色是执行者的角度。
面向对象的角色是指挥者的角度。
面向对象,是一种变成的思想,能把复杂的问题简单话,把执行者,变成指挥者。
思想比较抽象,可以举例说明。
事例:
- 电脑的窗口中有最大化,最小化,关闭;将这三个功能封装到窗口中就是面向对象的应用。
- 人开门:开的功能是门自己内部实现的,如折页等是如何工作的,门就成为对象。
- 人开车:车的功能是又内部实现的,如发动机如何工作,车就成为对象。
- 笔记本电脑:电脑只给了一些外部的接口提供给人使用,至于内部的功能对于使用者则不必了解。笔记本电脑就是对象。
- 买电脑:对于不懂电脑的人来说他只要找个懂电脑的人帮忙买就OK了,他只需要得到结果,至于懂电脑的人功能则不必了解,懂电脑的人就是对象,封装了懂电脑的功能。
- 老板招聘:当老板招聘开发人员的时候,开发人员具备了开发的功能,公司只要使用就可以,这时受聘者变成了对象。
- 点菜:当你去吃饭时,跟服务员点菜,至于服务员如何记录如何跟后厨交代,则不必要管,服务员就是对象,你调用了他点菜的功能,然后服务员告诉后厨做一个XX菜,这时服务员又调用了厨师的做菜功能,厨师就是对象。
总之万物皆对象。
写程序要先面向对象,不要上来就写程序。
名词提炼法:
人开门:
人
{
开门(门)
}
门
{
开();
}
面向对象有三个特征:
1、封装
2、集成
3、多态
开发其实就是找对象使用,没有对象,就创建一个对象。
找对象,建立对象,使用对象,维护对象的关系。
类和对象的关系:
类就是:对现实生活中事物的描述
对象:就是这类事物,实实在在存在个体。
现实生活中的对象:张三,李四
想要描述:提取对象*性内容。对具体的抽象
描述时:这些对象的共性有:姓名,年龄,性别,学习JAVA的功能。
映射到Java中,描述就是class定义的类。
具体对象就是对应Java在堆内存中用new建立实体。
类与对象的图例
类与对象的图例
可以理解为:
类就是图纸
汽车就是堆内存中的对象
匿名对象
封装:
封装是指隐藏对象的属性和现实细节,仅对外提供公共访问方式
好处:
将变化隔离
便于使用
提高重用性
提高安全性
封装原则:
将不需要对外提供的内容都隐藏起来
把属性都隐藏,提供公共方法对其访问。
例1:
class car
{
//描述颜色
String color = "red"; //red是显示初始化值,实际对象C产生时该值为null
//描述轮胎数
int num = 6;
//运行行为
void run ()
{
System.out.println (color+"...................."+num);
}
//属性对应的是类中的变量,行为对应的是类中的函数(方法)
//其实定义类,就是在描述事物,就是在定义属性和行为。属性和行为共同称为类中的成员(成员包括成员变量和成员函数)
//成员变量作用于整个类中,局部变量作用与函数中或者语句中。
//在内存中的位置,成员变量在堆内存中,因为对象的存在,才存在在内存中。局部变量在栈内存中。
}
class cardemo
{
public static void main(String[] args)
{
//生产汽车,在Java中通过new操作符来完成,其实就是在堆内存产生一个实体。
car c = new car (); //c就是类类型变量。记住:类类型变量指向对象。
//需求:将已有车的颜色改成黄色,指挥该对象做使用。在Java中指挥方式是
c.color = "blue";
c.run();
car c1 = new car ();
c1.color = "black";
c1.run();
}
}
例2、左侧图单个引用指向单个对象,右侧图多个引用 指向同一个对象
例3:匿名对象
匿名对象使用方式一、
当对象的方法只调用一次时可以使用匿名对象完成,
如果对一个对象进行多个成员调用必须给这个对象起名。
匿名对象使用方式二、可以将匿名对象作为实际参数进行传递
class car2
{
public static void main(String[] args)
{
car c= new car();
c.run();
c.num =5;
new car ().run();//匿名方式。
/*匿名对象使用方式一、
当对象的方法只调用一次时可以使用匿名对象完成,
如果对一个对象进行多个成员调用必须给这个对象起名。
匿名对象使用方式二、可以将匿名对象作为实际参数进行传递
*/
car n = new car ();
show (n);
}
//匿名对象的使用方式二、
//需求:汽车修配厂,对汽车进行改装,将来的车都改成黑色,3个轮胎。
public static void show (car c) //创建一个car类型的c 这个和 int num这个参数传递一样。
{
c.num=3;
c.color="black";
c.run();
}
}
方式一画图解释:
方式二画图解释: