创建Class

在题为 “对象、类与接口”的章节中,我们通过 Bicycle 类作为面向对象概念的入门示例,其中racing bikes、mountain bikes和tandem bikes分别作为子类。以下是 Bicycle 类的实现示例代码,旨在帮助您了解类声明的基本框架。后续章节将逐步回溯并详细解释类声明的具体实现。目前请不必过多关注细节。

public class Bicycle {
        
    // the Bicycle class has
    // three fields
    public int cadence;
    public int gear;
    public int speed;
        
    // the Bicycle class has
    // one constructor
    public Bicycle(int startCadence, int startSpeed, int startGear) {
        gear = startGear;
        cadence = startCadence;
        speed = startSpeed;
    }
        
    // the Bicycle class has
    // four methods
    public void setCadence(int newValue) {
        cadence = newValue;
    }
        
    public void setGear(int newValue) {
        gear = newValue;
    }
        
    public void applyBrake(int decrement) {
        speed -= decrement;
    }
        
    public void speedUp(int increment) {
        speed += increment;
    }
}

一个继承自Bicycle类的 MountainBike 类的声明可能如下所示:

public class MountainBike extends Bicycle {
        
    // the MountainBike subclass has
    // one field
    public int seatHeight;
    // the MountainBike subclass has
    // one constructor
    public MountainBike(int startHeight, int startCadence,
                        int startSpeed, int startGear) {
        super(startCadence, startSpeed, startGear);
        seatHeight = startHeight;
    }   
        
    // the MountainBike subclass has
    // one method
    public void setHeight(int newValue) {
        seatHeight = newValue;
    }   
}

MountainBike 继承了 Bicycle 的所有字段和方法,并新增了seatHeight字段及其设置方法(山地车座椅可根据地形需求上下调节)。
你可能见过以下定义的类:

class MyClass {
    // field, constructor, and method declarations
}

这是一个类声明。类主体(大括号之间的区域)包含所有为该类创建的对象的生命周期提供支持的代码:用于初始化新对象的构造函数、声明类及其对象状态的字段声明,以及实现类及其对象行为的方法。
上述类声明是最简形式,仅包含类声明所需的必要组件。您可以在类声明开头提供更多关于该类的信息,例如其父类的名称、是否实现了任何接口等。例如:

class MyCLass extends MySuperClass implements YourInterface {
    // field, constructor, and method declarations
}

这意味着 MyClassMySuperClass 的子类,并且它实现了 YourInterface 接口。
你也可以在类声明的最开头添加修饰符,比如 publicprivate ——由此可见,类声明的开头行可能会变得相当复杂。修饰符 publicprivate 决定了其他类能否访问 MyClass,本节后文将对此进行讨论。关于接口和继承的章节将解释如何以及为何要在类声明中使用 extendsimplements 关键字。目前你不必担心这些额外的复杂性。
通常,类声明可以包含以下组件,顺序如下:

  1. 修饰符如 public、private 以及其他若干修饰符(你将在后续内容中遇到)。(但请注意,private 修饰符仅可应用于嵌套类。)
  2. 类名,按惯例首字母大写。
  3. 类的父类(超类)名称(如有),前面需加上关键字 extends。一个类只能继承(子类化)一个父类。
  4. 由关键字 implements 引导的、该类实现的接口的逗号分隔列表(如有)。一个类可以实现多个接口。
  5. 用大括号 {} 包围的类主体。

声明成员变量

变量有以下几种类型:

  • 类中的成员变量——这些被称为字段。
  • 方法或代码块中的变量——这些称为局部变量。
  • 方法声明中的变量——这些被称为参数。
  • Bicycle 类使用以下代码行定义其字段:
public int cadence;
public int gear;
public int speed;

字段声明由三个按顺序排列的组成部分构成:

  1. 零个或多个修饰符,例如 publicprivate
  2. 字段的数据类型
  3. 字段的名称

Bicycle 类的字段名为 cadencegearspeed,数据类型均为整型(int)。public 关键字将这些字段标识为公共成员,任何能够访问该类的对象均可访问它们。

控制成员的访问

第一个(最左侧)修饰符用于控制其他类对成员字段的访问权限。目前只需考虑 publicprivate 两种。其他访问修饰符将在后续章节中讨论。

  • public 修饰符——该字段可被所有类访问。
  • private 修饰符——该字段仅在其所属类内部可访问。

遵循封装原则,通常会将字段设为私有。这意味着它们只能从 Bicycle 类内部直接访问。然而我们仍需获取这些值,可通过添加公共方法间接实现——这些方法将为我们获取字段值:

public class Bicycle {
    // the bicycle class has three fields
    public int cadence;
    public int gear;
    public int speed;

    // the Bicycle class has one constructor
    public Bicycle(int startCadence, int startSpeed, int startGear) {
        gear = startGear;
        cadence = startCadence;
        speed = startSpeed;
    }
    
    public int getCadence() {
        return cadence;
    }

    public void setCadence(int cadence) {
        this.cadence = cadence;
    }

    public int getGear() {
        return gear;
    }

    public void setGear(int gear) {
        this.gear = gear;
    }

    public void applyBrake(int decrement) {
        speed -= decrement;
    }   

    public void speedUp(int increment) {
        speed += increment;
    }
}

设置变量的类型

所有变量都必须具有类型。你可以使用基本类型,如 intfloatboolean 等;也可以使用引用类型,如字符串 stringsarraysobjects

命名一个变量

所有变量——无论是字段、局部变量还是参数——均遵循语言基础部分“变量与命名”中所述的命名规则与约定。

需注意本节内容:方法名与类名同样适用上述命名规则,但需满足以下例外:

  • 类名首字母应大写,
  • 方法名首个(或唯一)单词应为动词。