implements
clause in the class declaration. Your class can implement more
than one interface, so the implements keyword is followed
by a comma-separated list of the interfaces implemented by the
class.
By convention, the implements
clause follows the extends clause, if there is one.
public interface Relatable {
// this (object calling isLargerThan) and
// other must be instances of the same class
// returns 1, 0, -1 if this is greater
// than, equal to, or less than other
public int isLargerThan(Relatable other);
}
Relatable.
Any class can implement Relatable if there is some way to
compare the relative "size" of objects instantiated from the class. For strings, it could be
number of characters; for books, it could be number of pages; for students, it could be weight;
and so forth. For planar geometric objects, area would be a good choice (see the
RectanglePlus class that follows), while volume would work for three-dimensional geometric objects.
All such classes can implement the isLargerThan() method.
If you know that a class implements Relatable, then you
know that you can compare the size of the objects instantiated from that class.
Rectangle class that was presented in the
Creating Objects section, rewritten to implement Relatable.
public class RectanglePlus implements Relatable {
public int width = 0;
public int height = 0;
public Point origin;
// four constructors
public RectanglePlus() {
origin = new Point(0, 0);
}
public RectanglePlus(Point p) {
origin = p;
}
public RectanglePlus(int w, int h) {
origin = new Point(0, 0);
width = w;
height = h;
}
public RectanglePlus(Point p, int w, int h) {
origin = p;
width = w;
height = h;
}
// a method for moving the rectangle
public void move(int x, int y) {
origin.x = x;
origin.y = y;
}
// a method for computing the area of the rectangle
public int getArea() {
return width * height;
}
// a method required to implement the Relatable interface
public int isLargerThan(Relatable other) {
RectanglePlus otherRect = (RectanglePlus)other;
if (this.getArea() < otherRect.getArea())
return -1;
else if (this.getArea() > otherRect.getArea())
return 1;
else
return 0;
}
}
RectanglePlus implements Relatable,
the size of any two RectanglePlus objects can be compared.
isLargerThan method, as defined in the
Relatable interface, takes an object of
type Relatable.
The line of code, shown in bold in the previous example,
casts other to a RectanglePlus instance.
Type casting tells the compiler what the object really is.
Invoking getArea directly on the other
instance (other.getArea()) would fail to compile
because the compiler does not understand that other
is actually an instance of RectanglePlus.