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(); } 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(); ColorPoint cp = new ColorPoint(0, 0, "red"); Point p = cp; o.bar(cp); // bar その2が呼ばれる o.bar(p); // bar その1が呼ばれる } }