Java Reference
In-Depth Information
Example 2•1: Rect.java (continued)
**/
public Rect union(Rect r) {
return new Rect((this.x1 < r.x1) ? this.x1 : r.x1,
(this.y1 < r.y1) ? this.y1 : r.y1,
(this.x2 > r.x2) ? this.x2 : r.x2,
(this.y2 > r.y2) ? this.y2 : r.y2);
}
/**
* Return the intersection of this rectangle with another.
* I.e. return their overlap.
**/
public Rect intersection(Rect r) {
Rect result = new Rect((this.x1 > r.x1) ? this.x1 : r.x1,
(this.y1 > r.y1) ? this.y1 : r.y1,
(this.x2 < r.x2) ? this.x2 : r.x2,
(this.y2 < r.y2) ? this.y2 : r.y2);
if (result.x1 > result.x2) { result.x1 = result.x2 = 0; }
if (result.y1 > result.y2) { result.y1 = result.y2 = 0; }
return result;
}
/**
* This is a method of our superclass, Object. We override it so that
* Rect objects can be meaningfully converted to strings, can be
* concatenated to strings with the + operator, and can be passed to
* methods like System.out.println()
**/
public String toString() {
return "[" + x1 + "," + y1 + "; " + x2 + "," + y2 + "]";
}
}
Testing the Rect Class
Example 2-2 is a standalone program named
RectTest
that puts the
Rect
class of
Example 2-1 through its paces. Note the use of the
new
keyword and the
Rect()
constructor to create new
Rect
objects. The program uses the
.
operator to invoke
methods of the
Rect
objects and to access their fields. The test program also relies
implicitly on the
toString()
method of
Rect
when it uses the string concatenation
operator (
+
) to create strings to be displayed to the user.
Example 2•2: RectTest.java
package com.davidflanagan.examples.classes;
/** This class demonstrates how you might use the Rect class */
public class RectTest {
public static void main(String[] args) {
Rect r1 = new Rect(1, 1, 4, 4);
// Create Rect objects
Rect r2 = new Rect(2, 3, 5, 6);
Rect u = r1.union(r2);
// Invoke Rect methods
Rect i = r2.intersection(r1);
if (u.isInside(r2.x1, r2.y1)) // Use Rect fields and invoke a method
System.out.println("(" + r2.x1 + "," + r2.y1 +