7.1 类与对象的概念
7.1.1 面向对象编程的概念
面向对象编程(OOP,Object-Oriented Programming)是一种编程范式,通过“类”和“对象”来实现对现实世界的模拟和抽象。OOP 强调对象的概念,将数据和操作数据的方法封装在一起,便于代码的重用和维护。
7.1.2 使用类和对象开发程序的基本步骤
在面向对象编程中,开发的主要工作是编写类。面向对象开发的基本步骤如下:
-
开发类,类 = 属性(成员变量) + 方法。
-
通过
new
关键字创建对象。 -
使用类中的属性和方法:对象.属性名 对象.方法名()。
7.1.3 类与对象
-
类是一种逻辑结构,描述了具有公共属性和行为的一个群体。例如,可以定义
Student
类描述学生的公共属性和行为,定义一个Teacher
类描述老师的公共属性和行为。 -
对象是类的实例。例如,学生张三、老师王老师。
类定义了一种新的数据类型。对象是根据类定义的变量。可以将类看做是复合类型。类是对象的模板(template),对象是类的实例(instance)。
7.2 定义类
7.2.1 类的一般形式
class 类名 { // 类名通常以大写字母开始 类型 变量1; 类型 变量2; ... 类型 方法名(参数列表) { // 方法体 } ... }
在类中定义的变量和方法都称为类的成员。所以变量又称为成员变量,方法又称为成员方法。
7.2.2 类的属性
类的成员变量又称为类的属性。
public class Student { /** * 属性 成员变量 * 类的{}内直接声明(定义)的变量叫成员变量/实例变量 */ String name; int age; double score; }
属性属于类的某个具体对象。类的每个实例(即类的每个对象)都包含这些变量的副本,因此在类中定义的变量又被称为实例变量。
7.2.3 类的方法
方法是对象行为特征的抽象,类具有的共性的功能操作,称之为方法。方法的基本语法:
修饰符 返回类型 方法名(形参列表) { // 功能代码 }
形参可以为空,可以有多个,形参的类型可以是基本类型也可以是引用类型。
例如:
public class Student { String name; int age; double score; void study() { // 功能代码 } void show() { // 功能代码 } }
注意:
-
方法中定义的变量称为局部变量。
-
如果没有返回值,则方法的返回类型必须为
void
。 -
当方法有具体的返回类型时,则必须使用
return
语句返回一种值。
7.3 对象的声明与创建
对象的声明和创建一般步骤如下:
Student stu1; // 声明对象的引用 stu1 = new Student(); // 创建对象
例如:
public static void main(String[] args) { Student stu1 = new Student(); stu1.name = "张三"; // 访问对象的属性 stu1.age = 20; stu1.score = 95.5; stu1.show(); // 方法调用 Student stu2 = new Student(); stu2.name = "李四"; // 访问对象的属性 stu2.age = 22; stu2.score = 98; stu2.show(); // 方法调用 Student stu3 = stu2; stu3.show(); }
注意:
-
属性属于类的具体对象,不同对象的属性值通常是不同的。
-
虽然方法也是通过对象调用的,但是各对象共享相同的方法。
7.4 类练习
7.4.1 Teacher 类
定义 Teacher
,属性:姓名,年龄,工资。方法:Teach()
; Show()
。
7.4.2 Box 类
属性:长、宽、高。方法:计算体积。
7.4.3 Dog 类
属性:name
、color
、age
。方法:eat()
。
7.4.4 Cat 类
属性:name
、color
、age
。方法:eat()
。
7.4.5 Triangle 类
属性:底
、高
。方法:计算面积。
7.4.6 Rectangle 类
属性:长
(length
)、宽
(width
)。方法:计算面积(area
)。
7.4.7 Circle 类
属性:半径
。方法:计算面积。
7.4.8 测试类
可以创建一个 Engineer
类来测试上述各类的功能。
7.5 为引用变量赋值
Box b1 = new Box(); // 创建对象,让 b1 指向(引用)所创建的对象 Box b2 = b1; // 将 b1 引用赋值给 b2
注意:b1 和 b2 引用同一个对象。
对象引用与对象的关系:
-
对象引用,有时也称为对象引用变量,或称为引用变量。
-
对象引用与对象在物理上是两个不同的东西。
-
对于上述例子,我们通常说 b1 引用(有时也称为指向)图中的那个 Box 对象。
-
对象只能通过对象引用来操作。有时直接使用对象引用代指对象,例如,对于上述例子,有时会直接将 b1 引用的对象称为“对象 b1”或“b1 对象”。
-
将一个对象引用赋值给另一个对象引用,则两个引用变量指向同一个对象。
-
对引用变量进行相等性比较,例如
b1 == b2
,是比较两个引用变量是否引用同一个对象,所以b1 == b2
的结果为true
。对对象引用进行相等性比较,有时也直接称为对象的相等性比较。
基本类型与引用类型的区别:
-
基本类型的变量位于栈内存中。
-
引用变量所引用的对象位于堆内存中。