1. 理解什么是面向对象
当不再面对具体的每一个方法时,发现操作也变的简单了很多。而封装具体功能的这个类,才是我们需要面对的。而基于这个封装了具体功能的类,一般情况下,在Java中需要通过创建这个类的实体来使用。
这个实体称之为对象。在开发中,我们是在不断的找封装不同功能的类。基于这些类创建其对象,使用这些对象完成相应的操作。
面向对象是基于面向过程,对象是将功能进行了封装。只要找到了具体的类,创建出对象,就可以调用其中的具体功能。面向对象也是用来解决问题的一种思维模式。
在以后开发中,先找对象,调用对象中的具体功能。如果真的没有能够完成需求的对象,这时就自己创建对象,并将所需的功能定义到对象中,方便以后使用。
2.面向对象和面向过程差异
- 面向对象是一种更符合人们思考习惯的思想。
- 面向过程中更多的体现的是执行者,面向对象中更多的体现是指挥者。指挥对象做事情。
- 面向对象将复杂的问题简单化。
3.对象在需求中的使用
把大象装进冰箱
在针对具体的需求,可以使用名词提炼法进行分析,寻找具体的对象。
- 把大象装冰箱里
- 大象、冰箱
实施的步骤:
- 打开冰箱门
- 将大象装进去
- 关闭冰箱门
分析发现打开、装、关闭都是冰箱的功能。即冰箱对象具备如下功能:
- 冰箱打开
- 冰箱存储
- 冰箱关闭
用伪代码描述,上述需求中有两个具体的事物 大象 和 冰箱
大象{}
冰箱{
打开(){};
存储(大象){};
关闭(){};
}
总结:
- 先按照名词提炼问题领域中的对象。
- 对对象进行描述,其实就是在明确对象中应该具备的属性和功能。
- 通过 new 的方法就可以创建该事物的具体对象。
- 通过该对象调用它以后的功能。使用 . 访问属性和调用方法()
4.类和对象
-
类:现实生活中一种事物的抽象,把对事物的特征描述做成数据也就是属性。把事物具备的功能做成方法。
-
对象:一个类的具体实例。比如:人 和 张三同学
-
创建对象:new + 构造方法()。构造方法:无返回值名字与类名相同,功能是配合new关键字来创建对象。
注意:构造方法无返回值因为不需要额外信息数据。与类名一致是因为创建同名象。
构造方法根据属性的不同有多种重载形式,通常把无参数的构造方法称之为无参构造。
- 对象的内存:new + 构造方法() 创建的对象,在对内存中开辟空间。属性有默认值。
5.对象在代码中的体现与对象的匿名使用
在分析现实生活中的事物时发现,这些事物都有其具体的特点和功能,这些特点和功能就组成了这个特殊的事物。
描述小汽车,分析其具有的属性和行为。
- 事物的特点(属性):颜色,轮胎个数。
- 事物的行为(方法):运行。
可以简单理解:属性就是数值,其实就是变量;行为就是功能,就是函数。
文字模拟:
小汽车
{
颜色;
轮胎个数;
运行(){}
}
//
class Car
{
String color;// 颜色
int number;// 数量
void run()// 运行方法!!!
{
System.out.println(color+"::"+number);
}
}
/**通过代码的描述,知道类的真正意义就是在描述事物。属性和行为统称为事物中的成员。
*事物的成员分为两种:成员属性和成员行为。
*成员属性:在代码中的体现就是成员变量
*成员行为:在代码中的体现就是成员函数(方法)
*/
class CarDemo
{
public static void main(String[] args)
{ //测试:Car类中的run方法。
//1,创建Car的对象。给对象起个名字。
Car c = new Car();//c是类类型的变量。c指向了一个具体的Car类型的对象。
//2,通过已有的对象调用该对象的功能。格式:对象.对象成员;
//3,可以对该对象的属性赋值。
c.color = "red";
c.number = 4;
c.run();
}
}
//在main方法中,每次创建对象,只为了调用其run方法,而这时定义的c引用变量,几乎没有什么作用。
//而c等价于new Car();这时可以使用简化书写成new Car().run()
//简化书写,会使用匿名对象。
//匿名对象的使用场景:当对象对方法进行调用时,而且只调用一次时,可以简化成匿名对象来书写
class CarDemo
{
public static void main(String[] args)
{
Car c = new Car();
show(c); //简化成 show(new Car());//把匿名对象作为实际参数进行传递。
}
public static void show(Car cc) // Car cc = c; Car cc = new Car();
{
cc.color = "red";
cc.number = 4;
cc.run();
}
}