在面向对象中“方法”等同于非面向对象语言中的“过程”。也就是说,方法是一个程序的组成部分,用来提供实现某个动作的机制(方法),如前面示例中的barking。 对给定某个实体的实例,用“.”连接实例与class中定义的方法来实现对行为的调用:
方法调用语法
<instance>.<behavior>()
<variable> = <instance>.<behavior>(<arguments>...)
譬如,让 dog fido 来 bark 一次的操作如下:
fido.bark()
从语法上说,Java 语言支持将数据传给方法和获取从方法返回的值,但上面示例中的调用既没传数据也没有返回值。
Java 是一门强调类型(strongly typed) 的语言,它要求变量、变量的值、返回类型等都必须正确匹配,部分原因在于数据类型是区分同名的多个方法的要素。 方法的返回类型和参数都是在定义的时候就给定的:
方法定义语法
void <method-name>(<arguments>...) {
<statements>...
}
<return-type> <method-name>(<arguments>...) {
<statements>...
}
方法名,返回类型以及参数表合起来叫方法标记(method signature)。在现代的 OO 语言中,一个 class 内可以用同一名字定义多个方法,只要它们的标记不同。这就是方法的重载(overloading)。 Java 中还规定,返回类型不能作为区分方法标记的因素,因此,假如两个方法具有相同的名称和参数,只是返回类型不同,是不答应出现在同一 class 中的。
在上例中,返回类型为 void 表明方法 bark() 无须计算出任何结果传回给调用它的程序块。同时,bark() 也被无参调用。按对象学的说法,调用特定对象(即类的某个实例)的方法被称为消息传递(message passing)。在上例中,消息不含有附加数据(没有参数)。
至此,假如我们为 Dog 创建了一个实例,那么当它被激活时就能够 bark 了,但是我们尚无办法描述某些数据,比方说,让它 bark 多少次,它是什么品种等等。在考察那些能使 Dog 这个数据类型更加通用的语言结构之前,我们还应先考虑Java语言的另一个方面,那就是,运行一个程序到底需要什么?