public class OverloadTest { double x, y; public OverloadTest(double x0, double y0) { x = x0; y = y0; } public void foo(double dx, double dy) { // foo-1 x += dx; y += dy; } public void foo(int dx, int dy) { // foo-2 x *= dx; y *= dy; } public void bar(Point p) { // bar-1 System.out.print("Point class: "); p.print(); System.out.println(); } public void bar(ColorPoint p) { // bar-2 System.out.print("ColorPoint class: "); p.print(); System.out.println(); } public void print() { System.out.printf("(%g, %g)", x, y); System.out.println(); } /* 1 */ public static void main(String[] args) { OverloadTest o = new OverloadTest(1.1, 2.2); o.foo(3.3, 4.4); // foo-1 が呼ばれる o.print(); o.foo(2, 3); // foo-2 が呼ばれる o.print(); /* 2 */ ColorPoint cp = new ColorPoint(0, 0, "red"); Point p = cp; o.bar(cp); // bar-2 が呼ばれる o.bar(p); // bar-1 が呼ばれる } }