创建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
}
这意味着 MyClass 是 MySuperClass 的子类,并且它实现了 YourInterface 接口。
你也可以在类声明的最开头添加修饰符,比如 public 或 private ——由此可见,类声明的开头行可能会变得相当复杂。修饰符 public 和 private 决定了其他类能否访问 MyClass,本节后文将对此进行讨论。关于接口和继承的章节将解释如何以及为何要在类声明中使用 extends 和 implements 关键字。目前你不必担心这些额外的复杂性。
通常,类声明可以包含以下组件,顺序如下:
- 修饰符如 public、private 以及其他若干修饰符(你将在后续内容中遇到)。(但请注意,private 修饰符仅可应用于嵌套类。)
- 类名,按惯例首字母大写。
- 类的父类(超类)名称(如有),前面需加上关键字 extends。一个类只能继承(子类化)一个父类。
- 由关键字 implements 引导的、该类实现的接口的逗号分隔列表(如有)。一个类可以实现多个接口。
- 用大括号 {} 包围的类主体。
声明成员变量
变量有以下几种类型:
- 类中的成员变量——这些被称为字段。
- 方法或代码块中的变量——这些称为局部变量。
- 方法声明中的变量——这些被称为参数。
- Bicycle 类使用以下代码行定义其字段:
public int cadence;
public int gear;
public int speed;
字段声明由三个按顺序排列的组成部分构成:
- 零个或多个修饰符,例如 public 或 private。
- 字段的数据类型
- 字段的名称
Bicycle 类的字段名为 cadence、gear 和 speed,数据类型均为整型(int)。public 关键字将这些字段标识为公共成员,任何能够访问该类的对象均可访问它们。
控制成员的访问
第一个(最左侧)修饰符用于控制其他类对成员字段的访问权限。目前只需考虑 public 和 private 两种。其他访问修饰符将在后续章节中讨论。
- 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;
}
}
设置变量的类型
所有变量都必须具有类型。你可以使用基本类型,如 int、float、boolean 等;也可以使用引用类型,如字符串 strings、arrays 或 objects。
命名一个变量
所有变量——无论是字段、局部变量还是参数——均遵循语言基础部分“变量与命名”中所述的命名规则与约定。
需注意本节内容:方法名与类名同样适用上述命名规则,但需满足以下例外:
- 类名首字母应大写,
- 方法名首个(或唯一)单词应为动词。