面向对象基础
一、面向对象和面向过程思想对比
面向过程:是一种以过程为中心的编程思想,实现功能的每一步,都是自己实现的
面向对象:是一种以对象为中心的编程思想,通过指挥对象实现具体的功能
面向过程编程(POP):自己干活
面向对象编程(OOP):指挥别人干活
简单来说,就是具有具体功能的事物,都可以通过代码的形式将其描述为程序中的对象,然后就可以指挥这些对象去调用里面的功能
对象:指客观存在的事物,万物皆对象
二、类和对象
什么是类?
类是对现实生活中一类具有共同属性和行为的事物的抽象
类是对事物,也就是对象的一种描述,可以将类理解为一张设计图
根据设计图,可以创建出具体存在的事物
根据类去创建对象
2.1类的定义
类的组成:属性和行为
属性:在类中通过成员变量来体现(类中方法外的变量)
行为:在类中通过成员方法来体现
2.2类的定义步骤:
① 定义类
② 编写类的成员变量
③ 编写类的成员方法
2.3类和对象的关系
类:类是对现实生活中一类具有共同属性和行为的事物的抽象
对象:是能够看得到摸的着的真实存在的实体
2.4对象的使用
创建对象
格式:类名 对象名 = new 类名();
范例:Student s = new Student();
使用对象
1:使用成员变量
格式:对象名.变量名
范例:p.name
2:使用成员方法
格式:对象名.方法名()
范例:p.study();
三、类中的变量
类中的变量分为成员变量和局部变量
成员变量: 类中方法外的变量
局部变量: 方法中的变量
| 区别 | 成员变量 | 局部变量 |
|---|---|---|
| 类中的位置不同 | 类中方法外 | 方法内或者方法声明上(形参) |
| 内存中位置不同 | 堆内存 | 栈内存(方法被调用会进入栈内存中,调用完成后弹栈) |
| 生命周期不同 | 随着对象的存在而存在,随着对象的消失而消失 | 随着方法的调用而存在,随着方法的调用完毕而小时 |
| 初始化值不同 | 有默认的初始化值 | 没有默认的初始化值,必须先定义,赋值,才能使用 |
四、封装(面向对象三大特征之一)
了解封装之前先来了解两个关键字
private关键字和this关键字
4.1 private关键字
是一个权限修饰符,可以修饰成员(成员变量和成员方法),被private修饰的成员只能在本类中才能访问
针对private修饰的成员变量,如果需要被其他类使用,提供相应的操作
- 提供get变量名()方法,用于获取成员变量的值,方法用public修饰
- 提供set变量名(参数)方法,用于设置成员变量的值,方法用public修饰
对于一个标准类来说:
需要把成员变量用private修饰,还需要提供对应的setXxx()/getXxx()方法
4.2 this关键字
问:如果局部变量和成员变量如果重名,会怎么调用?
答:局部变量和成员变量如果重名,Java使用的是就近原则
如果想要自己控制调用的是哪个变量,这时候就需要用到this关键字了
this关键字的作用:可以调用本类的成员(变量, 方法)解决局部变量和成员变量的重名问题
this:代表所在类的对象引用
记住:方法被哪个对象调用,this就代表哪个对象
4.3 封装
面向对象三大特征之一(封装,继承,多态)
隐藏实现细节,仅对外暴露公共的访问方式
问:封装指的就是私有吗?
答:私有仅仅是封装的一种体现
封装的体现
私有成员变量,提供setXxx和getXxx方法
将代码抽取到方法中,这是对代码的一种封装
将属性抽取到类当中,这是对数据的一种封装
封装的好处
1、提高了代码的安全性
2、提高了代码的复用性
五、构造方法
概述:
构建、创造对象的时候,所调用的方法
格式:
- 方法名与类名相同,大小写也要一致
- 没有返回值类型,连void都没有
- 没有具体的返回值(不能由retrun带回结果数据)
执行时机:
- 创建对象的时候调用,每创建一次对象,就会执行一次构造方法
- 不能手动调用构造方法
作用:
用于给对象的数据(属性)进行初始化
注意:
① 构造方法的创建
如果没有定义构造方法,系统将给出一个默认的无参数构造方法
如果定义了构造方法,系统将不再提供默认的构造方法
② 构造方法的重载
如果自定义了带参构造方法,还要使用无参数构造方法,就必须再写一个无参数构造方法
③ 推荐的使用方式
无论是否使用,都手动书写无参数构造方法,和带参数构造方法
六、标准类的制作
【快捷方式生成:只需要写成员变量,其他的可以用idea自动生成【
在类中右键,选择Generate
选择Constructor生成构造方法
① 成员变量
使用private修饰
② 构造方法
提供一个无参构造方法
提供一个带多个参数的构造方法
③ 成员方法
提供每一个成员变量对应的setXxx()/getXxx()
提供一个显示对象信息的show()
④ 创建对象并为其成员变量赋值的两种方式
无参构造方法创建对象后使用setXxx() 赋值
使用带参构造方法直接创建带有属性值的对象