第二章 类与对象
第一节 类与对象基础
概述
本节内容主要介绍面向对象程序设计(OOP)中的两个核心概念——类(Class)与对象(Object)。理解类与对象是掌握面向对象程序设计的基础,也是全国计算机等级考试四级(面向对象程序设计)中必考的重要内容。本节旨在帮助考生系统掌握类的定义、对象的创建与使用,理解它们的关系及应用,奠定后续学习继承、多态等高级特性的基础。
通过学习本节,考生将能够:
- 理解类和对象的基本概念及其联系
- 掌握类的成员(属性和方法)的定义方式
- 学会对象的创建与使用方法
- 理解封装的基本思想
- 结合实例深入理解类与对象的工作原理
核心概念
类(Class)
类是面向对象程序设计中的核心概念,是对一类具有相同属性和行为的对象的抽象和描述。它定义了对象所具有的属性(数据成员)和行为(方法)。
对象(Object)
对象是类的具体实例,是类的一个具体存在。对象拥有类定义的属性和方法,每个对象的属性值可以不同。
属性(成员变量)
属性是类中定义的数据,用于描述对象的状态。例如,人的类可以有姓名、年龄等属性。
方法(成员函数)
方法是类中定义的函数,用来描述对象的行为。例如,人的类可以有走路、说话的方法。
封装(Encapsulation)
封装是面向对象的基本特性之一,指将数据和操作数据的代码绑定在一起,并隐藏内部细节,只对外提供接口。
原理分析
面向对象程序设计通过类的抽象,将现实世界中的事物模型化为程序中的类和对象。类是抽象模板,对象是具体实例。程序通过创建对象来实现对现实事物的模拟和操作。
- 类的定义:类定义了一组属性和方法,是对一类事物的抽象描述。
- 对象的创建:通过类创建具体的对象,每个对象有独立的属性值。
- 封装机制:类将属性和方法封装在一起,隐藏内部细节,提高程序的安全性和维护性。
在程序运行时,系统根据类的定义在内存中开辟空间,存储对象的属性数据,方法则通过类定义的函数来实现对象的行为。
详细内容
1. 类的定义
类的定义是面向对象程序设计的第一步。类定义包括:类名、属性(成员变量)、方法(成员函数)。
- 类名:命名规范通常遵循大驼峰命名法,如Person、Student。
- 属性:定义对象的状态,通常用变量表示。
- 方法:定义对象的行为,通常用函数表示。
示例(伪代码):
class Person {
String name;
int age;
void speak() {
print("Hello, my name is " + name);
}
}
此定义描述了一个Person类,具有name和age两个属性,和一个speak方法。
2. 对象的创建与使用
创建对象的过程称为实例化。实例化后,可以通过对象访问类的属性和方法。
示例:
Person p = new Person();
p.name = "Alice";
p.age = 20;
p.speak(); // 输出:Hello, my name is Alice
- new关键字(或相应语言中的实例化方式)用于创建对象
- 对象通过“.”访问属性和方法
3. 封装性及访问控制
封装不仅是将属性和方法组织在类中,还包括访问权限控制,防止外部随意访问或修改内部数据。
常见访问修饰符:
- public:公开,任何地方都能访问
- private:私有,仅类内部访问
- protected:受保护,子类和同包访问(具体语言差异存在)
通过封装,数据被隐藏,只能通过方法访问,保证数据安全性。
示例:
class Person {
private String name;
public void setName(String newName) {
name = newName;
}
public String getName() {
return name;
}
}
外部不能直接访问name,只能通过setName和getName方法操作。
4. 类的成员变量和成员方法的区别
| 特点 | 成员变量 | 成员方法 |
|---|---|---|
| 定义 | 用于存储对象状态的数据 | 用于实现对象行为的函数 |
| 类型 | 变量 | 函数 |
| 访问 | 直接访问或通过方法访问 | 通过对象调用 |
| 内存分配 | 每个对象有独立的成员变量 | 方法在类中共享 |
理解两者区别,有助于设计合理的类结构。
5. 对象生命周期
对象从创建到销毁经历:
- 创建:实例化类,分配内存
- 使用:通过对象调用属性和方法
- 销毁:对象生命周期结束,内存回收(由系统自动管理或手动释放)
良好的内存管理是面向对象编程的重要内容。
实例分析
案例一:学生类的定义与使用
背景:设计一个学生类,包含学生的姓名、学号、年龄属性,以及显示学生信息的方法。
代码示例:
class Student {
String name;
String id;
int age;
void displayInfo() {
print("Name: " + name);
print("ID: " + id);
print("Age: " + age);
}
}
// 创建对象并使用
Student s = new Student();
s.name = "张三";
s.id = "2023001";
s.age = 21;
s.displayInfo();
分析:
- 类定义了学生的属性和行为
- 通过实例化创建具体学生对象
- 调用对象方法显示信息
结论:通过类和对象实现学生信息的封装和操作。
案例二:银行账户类封装示例
背景:设计银行账户类,属性包括账户名和余额,提供存款、取款和查询余额的方法。
代码示例:
class BankAccount {
private String accountName;
private double balance;
public BankAccount(String name, double initialBalance) {
accountName = name;
balance = initialBalance;
}
public void deposit(double amount) {
if (amount > 0) {
balance += amount;
}
}
public void withdraw(double amount) {
if (amount > 0 && amount <= balance) {
balance -= amount;
}
}
public double getBalance() {
return balance;
}
}
// 使用示例
BankAccount acc = new BankAccount("李四", 1000.0);
acc.deposit(500.0);
acc.withdraw(200.0);
print(acc.getBalance()); // 输出1300.0
分析:
- 使用private封装属性,防止外部直接修改
- 通过方法控制对余额的操作,保证业务逻辑正确
结论:封装保护数据,提供安全访问接口。
案例三:图形类层次结构初探(简单版)
背景:设计一个简单的图形类,包含属性宽度和高度,方法计算面积。通过类实例化矩形对象。
代码示例:
class Shape {
int width;
int height;
int area() {
return width * height;
}
}
Shape rect = new Shape();
rect.width = 10;
rect.height = 5;
print("Area: " + rect.area()); // 输出Area: 50
分析:
- 类定义了通用属性和行为
- 对象赋值具体数据,计算面积
结论:类和对象的结合实现了现实问题的抽象和解决。
常见误区
将类与对象混淆
- 错误:认为类就是对象
- 正确:类是模板,对象是实例
直接访问私有属性
- 错误:外部代码直接修改private属性
- 正确:通过公共方法访问,保证封装性
忽视对象初始化
- 错误:未对对象属性赋初值,导致使用异常
- 正确:通过构造方法或赋值初始化对象属性
方法与属性混用
- 错误:将行为写成属性,或将数据写成方法
- 正确:属性存数据,方法实现行为
忽略内存管理
- 错误:对象创建后不释放,导致资源浪费(部分语言)
- 正确:理解语言内存管理机制,合理使用对象
应用场景
软件系统设计
- 类与对象用于模拟现实世界事物,设计模块和组件
游戏开发
- 角色、道具、场景等均用类和对象表示,方便管理和扩展
数据库操作
- 实体类表示数据库表结构,对象映射数据库记录
图形界面编程
- 窗口、按钮、文本框等界面元素用类定义,实例化对象以实现交互
企业管理系统
- 员工、客户、订单等业务实体用类和对象管理
知识拓展
- 构造方法(Constructor):用于对象创建时的初始化操作
- 析构方法(Destructor):释放对象资源(部分语言支持)
- 静态成员(Static):属于类的属性和方法,所有对象共享
- this关键字:引用当前对象自身
- 封装、继承、多态:面向对象三大特性,后续章节深入讲解
- 设计模式:基于类和对象的设计思想,提高软件质量
总结回顾
本节系统讲解了类与对象的基础知识,明确类是抽象模板,对象是具体实例。重点掌握了类的定义、属性与方法、对象的创建与使用,以及封装的概念和实现方法。通过典型实例加深理解,避免常见误区,结合实际应用场景,帮助考生为后续面向对象高级特性的学习打下坚实基础。熟练掌握本节内容,是通过全国计算机等级考试四级面向对象程序设计科目的关键。
本节核心知识点复习:
- 类的定义和组成
- 对象的创建与使用
- 属性与方法的区别
- 封装及访问权限控制
- 对象生命周期管理
请考生结合示例代码多加练习,确保理解并能灵活运用类与对象的基本操作。