介绍
在本实验中,你将学习一个非常重要的编程模式:面向对象编程(Object-Oriented Programming, OOP)。你需要了解类(class)和对象(object)之间的区别。通过更多的练习,你将更好地理解这一概念。
类与对象
有许多编程语言,几乎也有同样多的编程风格(有时称为范式)。我们目前编写的程序主要是过程式的,因为重点在于指定计算过程。大多数 Java 程序是面向对象的,这意味着重点在于对象及其交互。以下是面向对象编程的一些特点:
对象通常表示现实世界中的实体。大多数方法是对象方法(例如你在 String 上调用的方法),而不是类方法(例如 Math 方法)。我们目前编写的方法都是类方法。在本章中,我们将编写一些对象方法。
通过限制对象之间的交互方式,尤其是防止它们在未调用方法的情况下访问实例变量,对象之间是相互隔离的。类被组织在家族树中,新类扩展现有类,添加新方法并替换其他方法。
在 Java 中,除了 Object 类之外,每个类都扩展了某个类。最基本的类是 Object 类。它不包含实例变量,但提供了 equals 和 toString 等方法。
许多类扩展了 Object,包括我们编写的几乎所有类以及许多 Java 类型,如 Integer、Double、String、数组等。任何未明确指定父类的类默认扩展 Object。类的“家族树”称为 类层次结构。Object 通常出现在顶部,所有 子类 位于其下。
类和对象通常具有一些属性,用于描述这些类/对象,而方法用于执行某些特定功能。这里我们给你一个示例,展示类的样子,将代码保存到 objectTest.java 并使用命令行运行代码。
示例:
在 /home/labex/project/objectTest.java 文件中编写以下代码:
// 使用关键字 'class' 创建一个名为 Person 的新类
class Person
{
/*
* 有四个属性,
* 字符串类型的 name,整数类型的 age
* 字符串类型的 gender,浮点数类型的 weight
*/
private String name;
private int age;
private String gender;
private float weight;
// 这是一个没有返回类型的构造函数,与类名相同,没有参数
public Person(){
}
// 这是一个带有两个参数的构造函数
public Person(String name, int age){
// 使用参数设置对象的 name 和 age
this.name = name;
this.age = age;
}
// 这是一个带有四个参数的构造函数
public Person(String name, int age, String gender, float weight){
// 使用参数设置对象的 name、age、gender 和 weight
this.name = name;
this.age = age;
this.gender = gender;
this.weight = weight;
}
// 这是一个对象方法
public void personInfo(){
System.out.println("Name: " + this.name + "\nAge: "+ this.age + "\nGender: " + this.gender + "\nWeight: "+this.weight);
}
}
public class objectTest{
public static void main(String[] args){
// 使用 'new' 创建 Person 类的一个实例
Person p = new Person("aaa",18,"male",50.5f); // p 引用一个对象
/* 你可以尝试这两种不同的构造方法,看看输出是什么。
* Person p = new Person();
* Person p = new Person("aaa",18);
*/
// 使用对象调用 personInfo() 方法
p.personInfo();
}
}
输出:
使用以下命令运行 objectTest.java 文件:
javac /home/labex/project/objectTest.java
java objectTest
查看输出:
Name: aaa
Age: 18
Gender: male
Weight: 50.5
Person 类中有四个属性。所有属性都是私有的,因此无法从外部访问(只能在类内部使用)。有一个名为 personInfo 的对象方法用于打印个人信息,还有三个与类名 Person 相同的构造函数。它们之间的唯一区别是参数不同。这种行为称为 重载。
总结
这一部分非常重要。类是具有共同特征的实体的抽象,而对象是具有特定特征的实体。你应该花更多时间理解上述编程风格。



