The JavaTM Tutorial
Previous Page Lesson Contents Next Page Start of Tutorial > Start of Trail > Start of Lesson Search
Feedback Form

Trail: Learning the Java Language
Lesson: Classes and Inheritance

Returning a Value from a Method

You declare a method's return type in its method declaration. Within the body of the method, you use the return statement to return the value. Any method declared void doesn't return a value. It may contain a return statement to break out of the method, but may not return a value. Any method that is not declared void must contain a return statement with a corresponding return value.

Let's look at the isEmpty method in the Stack class:

public boolean isEmpty() {
    return items.isEmpty();
}
The data type of the return value must match the method's declared return type; you can't return an integer value from a method declared to return a boolean. The declared return type for the isEmpty method is boolean, and the implementation of the method returns the boolean value true or false, depending on the outcome of the call to items.isEmtpy.

The isEmpty method returns a primitive type. A method can return a reference type. For example, Stack declares the pop method that returns the Object reference type:

public Object pop() {
  if (items.size() == 0)
      throw new EmptyStackException();
  return items.remove(items.size() - 1);
}
When a method uses a class name as its return type, such as pop does, the class of the type of the returned object must be either a subclass of or the exact class of the return type. Suppose that you have a class hierarchy in which ImaginaryNumber is a subclass of java.lang.Number, which is in turn a subclass of Object, as illustrated in the following figure.

The class heirarchy for ImaginaryNumber

The class heirarchy for ImaginaryNumber

Now suppose that you have a method declared to return a Number:
public Number returnANumber() {
    ...
}
The returnANumber method can return an ImaginaryNumber but not an Object. ImaginaryNumber is a Number because it's a subclass of Number. However, an Object is not necessarily a Number — it could be a String or another type.

You can override a method and define it to return a subclass of the original method, like this:

public ImaginaryNumber returnANumber() {
    ...
}
This technique, called covariant return type (introduced in release 5.0), means that the return type is allowed to vary in the same direction as the subclass. You can find another example of the covariant return type in the Annotations (in the Learning the Java Language trail) section.

You also can use interface names as return types. In this case, the object returned must implement the specified interface.


Previous Page Lesson Contents Next Page Start of Tutorial > Start of Trail > Start of Lesson Search
Feedback Form

Copyright 1995-2005 Sun Microsystems, Inc. All rights reserved.