part07——面向对象基础
part07——面向对象基础
知识储备
- 变量、数组、运算符、流程控制、方法的定义和基本语法
- 上述知识的基本应用
在线测试知识储备 👈
如果你能得70分,你就很不错哦!🎉,如果不到70分,可以多做几遍,每次做完有答案解析哦。 并且将part6的练习题敲过5个以上,说明Java的基础语法就全掌握了。
接下来,要学习的是Java中最核心的课程——面向对象编程
- 面向对象概述 🍐
- 类和对象的关系 🍐
- 类的定义和对象的创建 🍐
- 对象内存图 🍐
- 成员变量和局部变量 🍐
- 封装 🍐
- this 🍐
- 构造方法 🍐
1. 面向对象概述 🍐
面向对象
今天我们要探讨一个计算机编程中非常重要的概念——面向对象。在开始之前,让我们先回顾一下另一个编程方式——面向过程。
所谓面向过程,就像在按照一系列步骤做事情。
面向过程按照步骤和流程来组织代码的,逻辑上是线性的,一步接一步。
面向对象则是一种不同的思维方式。它关注的是事物本身,强调对象之间的交互。
总结
上述的2种方式看起来似乎没有太大的区别,但是在更复杂的程序中,面向对象的方式可以更好地组织和管理代码。 为什么呢?
- 首先,可重用性。面向对象允许我们创建可以在不同地方多次使用的代码。
- 其次,维护性。如果我们需要改变装洗衣服的方法,只需要在女优对象中进行修改,而不用关心其他地方。
- 最后,可扩展性。我们可以轻松地添加新的对象和方法,而不破坏原有的代码。
所以,为什么要学习面向对象呢?
面向对象的开发更符合人类的思维习惯,能够让我们写出更清晰、更易读、更易维护的代码。在实际开发中,很多大型项目都采用面向对象的方式,这将是你未来学习和工作中必不可少的一部分。
总结
课堂作业
- 是一种以过程为中心的编程套路,这种方式是按照步骤和流程来组织代码的,逻辑上是线性的,一步接一步
- 面向对象则是一种以对象为中心的编程套路,通过指挥对象实现具体的功能。它关注的是事物本身,强调对象之间的交互
- 为什么要学习面向对象呢? 🎤
面向对象的开发更符合人类的思维习惯,能够让我们写出更清晰、更易读、更易维护的代码。在实际开发中,很多大型项目都采用面向对象的方式,这将是你未来学习和工作中必不可少的一部分。
2. 类和对象的关系 🍐
类和对象的关系
在编程世界中,类和对象是面向对象编程(OOP)中的两个基本概念。它们提供了一种组织和结构化代码的方式,使我们能够更容易地理解和管理复杂的程序。

什么是类?
类是对现实生活中一类具有共同属性和行为的事物的抽象
类是对事物,也就是对象的一种描述,可以将类理解为一张设计图(模板、模具等)

根据设计图(模板、模具等),可以创建出具体存在的事物 (对象)
组成结构: 一个类通常包括两个主要组成部分:
- 属性(成员变量): 描述类的特征或状态 如Elephant大象属性:颜色、体重、年龄、品种等
- 行为(成员方法): 定义类的行为或功能,如Elephant大象属性:吃草、睡觉、交配等
举例: 在我们的例子中,Elephant大象 和 Fridge 冰箱 分别就是类的例子。
// 以大象为例的类定义
public class Elephant {
// 属性
String color;
int weight;
// 方法
void lift() {
// 实现抬起大象的功能
}
void putInFridge() {
// 实现将大象放进冰箱的功能
}
}
什么是对象?
定义: 对象是类的一个实例,是类的具体体现。可以看作是类的一个具体个体。
关键特性: 对象具有唯一的标识、状态和行为。
举例: 在我们的例子中,myElephant 和 myFridge 就是对象的例子。
// 创建大象和冰箱的对象
Elephant myElephant = new Elephant();
Fridge myFridge = new Fridge();
类和对象的关系
类:类是对现实生活中一类具有共同属性和行为的事物的抽象
对象:是能够看得到摸的着的真实存在的实体

代码操作
类的定义:
什么是类: 类是一种抽象的模板,用于描述一类具有相似属性和行为的对象。
组成结构: 一个类通常由属性(成员变量)和 行为(成员方法)组成。
关键词: 类的定义使用关键词 class。
语法结构:
案例
// 以用户类为例的类定义
public class User {
// 属性
String name;
int age;
// 方法
void displayInfo() {
// 实现显示用户信息的功能
}
}
什么是对象: 对象是类的一个实例,是类的具体体现,是能够看得到摸的着的真实存在的实体。它具有唯一的标识、状态和行为。

总结
课堂作业
1.下面图片中1,2,3序号,哪些可以表示类,哪些可以表示对象(实例)
- 完成下面案例的定义🎤
需求1: 创建学生对象,通过学生对象使用 变量 和 方法
分析:
- 要创建学生对象,得先定义一个学生模板类
- 成员变量:姓名,年龄…
- 成员方法:学习…
需求2:创建手机对象,通过手机对象使用 变量 和 方法
分析:
- 要创建手机对象,首先得定义一个手机的模板类
- 成员变量:品牌,价格…
- 成员方法:打电话,发短信…
需求3:设计笔记本对象
- 让学生设计一个笔记本对象,该对象应该有哪些属性和方法?
分析:
属性可以包括品牌、型号、颜色、硬盘大小、内存大小等,方法可以包括编程、看片、浏览网页等。
善用Idea中的翻译插件
!!😊
通过这三个练习,学生可以深入理解对象的概念,思考对象的组成以及如何在程序中创建和使用对象。这样的互动能够帮助他们更好地理解抽象的概念,并提高实际编程的能力。
3. 对象内存图 🍐

- 一个类的class文件只会加载一次,和创建几个对象没有任何关系
- 注意:当堆内存中,对象或数组产生的地址,通过任何方式都不能被找到后,就会被判定为内存中的垃圾 ,垃圾会被Java垃圾回收器,空闲的时候自动进行清理
4. 成员变量和局部变量 🍐
成员变量和局部变量区别
成员变量和局部变量定义

成员变量和局部变量区别

总结
课堂作业
- 成员变量和局部变量的区别🎤
- 定义一个类,描述汽车,在类中定义成员变量name ,在定义一个run的方法,在run方法中定义一个局部变量 speed 时速,并输出“比亚迪正在以110km/h时速行驶!”
5. 封装 🍐
封装
面向对象三大特征:封装、继承、多态
所谓封装,就是用类设计对象处理某一个事物的数据时,应该把要处理的数据,以及处理数据的方法,都设计到一个对象中去。
比如:在设计学生类时,把学生对象的姓名、语文成绩、数学成绩三个属性,以及求学生总分、平均分的方法,都封装到学生对象中来。

封装的设计规范:合理隐藏、合理暴露
比如,设计一辆汽车时

- 汽车的发动机、变速箱等一些零件并不需要让每一个开车的知道,所以就把它们隐藏到了汽车的内部。
- 把发动机、变速箱等这些零件隐藏起来,这样做其实更加安全,因为并不是所有人都很懂发动机、变速箱,如果暴露在外面很可能会被不懂的人弄坏。
- 在设计汽车时,除了隐藏部分零件,但是还是得合理的暴露一些东西出来,让司机能够操纵汽车,让汽车跑起来。比如:点火按钮啊、方向盘啊、刹车啊、油门啊、档把啊... 这些就是故意暴露出来让司机操纵汽车的。

代码中实现:
- 合理隐藏: 将不需要对外暴露的成员变量或方法使用 private 修饰,只暴露必要的接口。
- 合理暴露: 提供公共方法,通过这些方法控制对成员变量的访问,确保在暴露的接口上进行数据验证或其他必要的操作
假设我们设计了一个 Car 类,有一个 manufacturingYear 成员变量表示汽车的生产年份。我们使用封装来确保这个年份在合理范围内,同时不直接暴露给外部。
public class Car {
private int manufacturingYear; //生产年份
// 提供公共方法,以获取manufacturingYear的值
public int getManufacturingYear() {
return manufacturingYear;
}
// 提供公共方法,以设置manufacturingYear的值
public void setManufacturingYear(int year) {
// 生产年份不能为负数
if (year > 0) {
manufacturingYear = year;
}
}
// 其他成员变量和方法...
}
总结
课堂作业
- 封装的设计规范是什么?🎤
- 为什么要合理隐藏?🎤
6. this 🍐
this
在面向对象编程中,this 是一个重要的关键字,用于指代当前对象的引用。它主要用于解决对象成员变量与方法内部变量命名冲突的问题。
什么是this关键字:
定义: this 是一个变量,代表当前对象的引用。
作用范围: 主要用在类的方法中。
指向当前对象: 当对象调用方法时,this 就指向调用该方法的对象。
public class MyClass {
int myVariable;
void myMethod(int myVariable) {
// 在这里,this.myVariable 指的是对象的成员变量,而 myVariable 指的是方法的参数
this.myVariable = myVariable;
}
}
二、应用场景:
解决命名冲突: 主要用于解决对象成员变量与方法内部变量命名相同的问题。
public class Example {
int variable; // 对象的成员变量
void setVariable(int variable) {
// 使用this关键字,明确指代对象的成员变量
this.variable = variable;
}
}
构造方法中的应用: 在构造方法中,可以使用this来调用其他构造方法,实现代码复用。
public class Person {
String name;
int age;
// 构造方法1
public Person(String name) {
this.name = name;
}
// 构造方法2,调用构造方法1
public Person(String name, int age) {
this(name); // 调用构造方法1
this.age = age;
}
}
总结
this关键字是一个用于指代当前对象的引用,主要用于解决成员变量与方法内部变量命名冲突的问题。在实际开发中,合理使用this可以提高代码的可维护性和可读性。
应用场景:
- 明确使用场景: 仅在需要区分成员变量和方法内部变量时使用this关键字。
- 代码可读性: 适当使用this可以增加代码的可读性,避免混淆。
7. 构造方法 🍐
构造方法
构造方法的定义:
构造方法是一种特殊的方法,用于在创建对象时进行初始化。构造方法的名称与类名相同,没有返回类型,并在 new 关键字后调用。
public class Student {
private String name;private int age;
// 构造方法
public Student(String studentName, int studentAge) {
name = studentName;
age = studentAge;
}
// 其他成员方法...
}
上面的例子中,Student 类定义了一个构造方法,接受学生的姓名和年龄,并在创建对象时进行初始化。
构造方法的特点:
- 与类同名: 构造方法的名称必须与类名相同。
- 没有返回类型: 构造方法没有返回类型,即使是 void 也不需要声明。
- 可以有参数: 构造方法可以接受参数,用于初始化对象的属性。
- 可以重载: 可以定义多个构造方法,以满足不同的初始化需求。
构造方法的应用场景:
- 初始化对象的属性: 构造方法通常用于初始化对象的属性,确保对象在创建时就具有合适的状态。
构造方法的注意事项:
1. 构造方法重载: 可以定义多个构造方法,但参数类型或数量应该不同,以便在不同情况下选择适当的构造方法。
public class Student {
private String name;private int age;
// 构造方法1
public Student(String studentName) {
name = studentName;
age = 0; // 默认年龄为0
}
// 构造方法2
public Student(String studentName, int studentAge) {
name = studentName;
age = studentAge;
}
// 其他成员方法...
}
**2. 默认构造方法**: 如果没有定义任何构造方法,Java 会提供一个默认的无参构造方法。如果定义了任何构造方法,Java 将不再提供默认构造方法。
```java
public class Student {
private String name;private int age;
// 默认构造方法
public Student() {// 默认初始化
}
// 构造方法
public Student(String studentName, int studentAge) {
name = studentName;
age = studentAge;
}
// 其他成员方法...
}
3. 构造方法调用: 在创建对象时,构造方法会自动调用。使用 new 关键字创建对象时,会根据参数匹配选择合适的构造方法。
总结
课堂作业
- 随便定义2个变量,然后使用idea工具,生成无参,一个参数,全参数的构造方法🎤
8. 面向对象编程综合案例 ✏️ ❤️
面向对象编程综合案例
标准模板类制作
成员变量
- 使用private修饰
构造方法
- 提供一个无参构造方法
- 提供一个带多个参数的构造方法
成员方法
- 提供每一个成员变量对应的setXxx()/getXxx()
- 提供一个显示对象信息的show()
创建对象并为其成员变量赋值的两种方式
- 无参构造方法创建对象后使用setXxx()赋值
- 使用带参构造方法直接创建带有属性值的对象
例如:
public class Car {
//成员变量
private String carName;
private String color;
//无参构造方法
public Car() { }
//多个参数的构造方法
public Car(String carName, String color) {
this.carName = carName;
this.color = color;
}
//成员方法
public void show(){ }
//获取成员变量carName值的方法
public String getCarName() { return carName; }
//设置成员变量carName值的方法
public void setCarName(String carName) { this.carName = carName; }
//获取成员变量color值的方法
public String getColor() { return color; }
//设置成员变量color值的方法
public void setColor(String color) { this.color = color; }
}
需求
