类与对象

JavaBeginner
立即练习

介绍

在本实验中,你将学习一个非常重要的编程模式:面向对象编程(Object-Oriented Programming, OOP)。你需要了解类(class)和对象(object)之间的区别。通过更多的练习,你将更好地理解这一概念。

类与对象

有许多编程语言,几乎也有同样多的编程风格(有时称为范式)。我们目前编写的程序主要是过程式的,因为重点在于指定计算过程。大多数 Java 程序是面向对象的,这意味着重点在于对象及其交互。以下是面向对象编程的一些特点:

对象通常表示现实世界中的实体。大多数方法是对象方法(例如你在 String 上调用的方法),而不是类方法(例如 Math 方法)。我们目前编写的方法都是类方法。在本章中,我们将编写一些对象方法。

通过限制对象之间的交互方式,尤其是防止它们在未调用方法的情况下访问实例变量,对象之间是相互隔离的。类被组织在家族树中,新类扩展现有类,添加新方法并替换其他方法。

在 Java 中,除了 Object 类之外,每个类都扩展了某个类。最基本的类是 Object 类。它不包含实例变量,但提供了 equalstoString 等方法。

许多类扩展了 Object,包括我们编写的几乎所有类以及许多 Java 类型,如 IntegerDoubleString、数组等。任何未明确指定父类的类默认扩展 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 相同的构造函数。它们之间的唯一区别是参数不同。这种行为称为 重载

总结

这一部分非常重要。类是具有共同特征的实体的抽象,而对象是具有特定特征的实体。你应该花更多时间理解上述编程风格。