@TOCjava面向对象概念
面向对象
不扯犊子,直接进入正题,面向对象简单来讲就是调用程序中的一个对象来实现我们想要的结果
面向过程:自顶向下,逐步处理问题,将问题分成一步步的去实现,第一步要做什么,第二步要做什么…
例如:在现实世界中,比如我们要回家,那么我们必须知道我们回家的路,然后一步步走回去,什么时候拐弯,什么时候直走,什么时候歪着走啥的
面向对象:分析解决问题需要哪些功能,然后直接调用功能。
例如:在面向对象的基础上,我们就可以直接调用一个对象来完成不必要的操作,比如,调用一个出租车对象,那么我们只需要直接做到出租车里就可以了,不必在考虑我们回家的路程—调用这个出租车对象其实就是面向对象的过程。
在我们调用出租车的这个过程中,虽然我们不必知道回家的路,但是出租车是得知道的,所以对于出租车来说,出租车是面向过程的,当然这不是我们需要考虑的,所以说,面向对象是建立在面向过程的基础之上的,面向对象和面向过程是不存在对立关系的。
说了那么多面向对象,面向过程,那么到底什么是对象呢?
举个”栗子“:
在java眼中,世界上一切客观存在的事物都是对象,世界都是由对象组成的,就和linux里面一句话一毛一样,“一切皆文件”而这里是“一切皆对象”; 在java眼中,一辆汽车,一个轮胎,一架飞机,一个杯子,一个碗,都可以说是一个对象。
程序中的对象:是在内存中的一块储存空间,只不过只有他自己关注的部分,比如一个汽车的轮子,汽车的型号,品牌,什么螺丝钉,这些都是非关注对象,也就不保存了。
现实中的对象
一辆车,车上有座椅、玻璃、显示屏、空调、轮胎…等等
程序中的对象
我们关注的部分只有我们自己需要的,这里就说座椅和车品牌吧
座椅数量:5
品牌:凯迪拉克
我们关注的部分只有两个,这也可以说是一个对象,只不过是在程序中的对象,我们可以通过这个对象来实例化很多很多的实例,可以说这只是一个对象的模板。
对象的组成
属性(特征): 就是对象有什么,比如对象有车门,有显示屏这个就是属性
方法(行为): 就是对象能干什么,能拉人,能代步。
比如一个兔子是一个对象
那么在这个兔子对象中的属性就是:兔子有耳朵,年龄,有的还要名字,这些事属性
方法呢就是这个兔子能吃,能跳,能跑,这个是兔子对象的方法。
注意:有时候一个对象的属性也有可能是一个对象,一个对象的调用者也可能是一个对象
例如:一部车有轮胎,车是对象,那么轮胎也是对象,一个出租车师傅使用车拉客,那么师傅是对象,车也是对象
对象之间的关系
一个对象继承了另一个对象:是 is a的关系 例如:狗是动物
一个对象有另一个对象:是 has a 的关系; 例如:车有轮胎
一个对象使用另外一个对象; use a 的关系; 例如:我使用键盘。
什么是类
1、类是对象的模板 通过类来实例化新的对象
2、类是人类对同一种事物共性的提取出来放到类中,通过类来实例化新的对象,例如:狗是动物,猫也是动物,兔子也是动物,那么他们就是一个动物类
3、根据类,创建出来新的对象,例如:使用摸具做东西的时候,摸具就是个类,生产出来的东西就是新的对象。
4、类是由方法和属性构成的;
借用一张老师的图来更好的理解一下:
这张图里面共性就是:name、age、sex、score
那么将这些提取出来,就是一个完整的类,通过这个类我们可以创建出来很多相同属性的对象。
在这个类里面还要两个方法,吃和睡的方法,这也是所有学生类的共性,所有学生类都会睡觉和吃饭这点没异议吧!当然学生直接睡觉这个,就不知道和谁睡了哈。。。。
继续看上面图:我们通过这个类创建出来了两个新的对象,小红和小郭,这两个就是存在程序中的对象
类的组成
1、属性:有什么,是个成员变量
创建位置:类的内部,方法外部
语法:数据类型 属性名(变量名); String name;
或者声明并赋值 String name = “导弹”;
注意:要么只声明,要么声明并赋值,不能先声明然后换一行又赋值。
属性都是有默认值的,默认值就是数据类型的默认值
如果定义属性的时候没有初始化属性的值,那么属性就是暂时以默认值存在的。
属性的作用范围:至少是整个类的内部
当属性名与局部变量名冲突时候,局部变量优
局部变量与属性的区别
局部变量 | 属性 | |
---|---|---|
位置 | 方法的内部 | 类的内部方法的外部 |
默认值 | 没有默认值 | 数据类型的默认值 |
作用范围 | 定义的那一行开始。到所在代码块的结束 | 至少为整个类的内部 |
命名冲突 | 作用范围重合内,不允许名称重复 | 与局部变量命名冲突,局部变量优先 |
class Cat {
//定义对象的属性
//姓名
String name;
//年龄
int age = 2;
//耳朵数量
int ares_number;
public void eat() {
//此时的局部变量优先,打印年龄的时候是10;
int age = 10;
}
//下面定义对象的方法
}
2、方法,能干什么,对象的具体行为,比如猫会睡觉,会吃饭,会撒尿啥的。。。。
位置:类的内部,其他方法的外部;
语法:修饰符 返回值类型 方法名(形参列表) {};
class Cat {
//定义对象的属性
//姓名
String name;
//年龄
int age;
//耳朵数量
int ares_number;
//下面定义对象的方法
public void eat() {
System.out.println("这只猫正在吃饭");
}
}
构造方法
构造方法是java规定的具有特殊功能的方法
作用:可以配合new关键字来创建对象,并且还能在创建对象的过程中初始化属性的值。
分类
无参构造方法
语法:public 方法名(){};
有参构造方法
语法:public 方法名(形参列表){//赋值语句};
注意:在构造方法的语法中,方法名必须与类名相同!!必须
class Cat {
//定义对象的属性
//姓名
String name;
//年龄
int age;
//耳朵数量
int ares_number;
//下面定义对象的方法
public void eat() {
System.out.println("这只猫正在吃饭");
}
//创建无参构造法方法
public Cat() {}
//创建有参构造方法
public Cat(String n,int a) {
name = n;
age = a;
}
}
后面说到this的时候这个有参还会有相应的改变。
普通方法和构造法方法之间的区别
解答:
普通方法: 是人为定义的方法,比如猫的吃饭,睡觉,等等还要很多,这个方法可有可无。
构造方法: 是必须要有的,就算你不创建,java程序中默认也会存在一个公开无参的构造方法,而且构造方法无法手动调用,只会在创建对象的时候自自动调用一次。
最后留一点说一下对象的创建过程
java对象的创建过程
1、分配堆空间,给各个属性赋上一个默认值(每种属性都是有默认值的)
2、初始化属性 为属性赋上初始化值
3、执行构造方法 为属性赋上构造参数值。
----------下一章说说创建对象的详细步骤---------