PHP: public class X { public void foo(X x){ System.out.println("X.X"); } public void foo(Y x){ System.out.println("X.Y"); }} PHP: public class Y extends X{ public void foo(Y x){ System.out.println("Y.Y"); } public void foo(X x){ System.out.println("Y.X"); }} PHP: public class Driver{ public static void whichFoo (X x1, X x2){ x1.foo(x2); }public static void main (String[] args){ X x = new X(); Y y = new Y(); whichFoo(x, x); whichFoo(x, y); whichFoo(y, x); whichFoo(y, y); }} mọi người bảo chương trình sẽ in ra những cái gì, vì sao
Viết Driver.whichFoo mới đúng. Tất cả đều in ra X.X. Hàm whichFoo gọi x1.foo(x2), vì x1 và x2 là kiểu X đương nhiên nó gọi hàm X.foo(X x).
Tôi thấy cái thời gian ông post bài lên diễn đàn hỏi nó in ra cái gì dùng để viết chạy thử luôn thì hơn.
tất nhiên chạy thử biết nó in ra cái gì, nhưng k0 giải thích được vì sao nó in ra như thế mới phải lên đây hỏi chứ viết hơi nhầm một tí, main là 1 method trong driver nên mới gọi thẳng như thế :p
Cái này mà Polymorphism gì .... Tự nhiên trong whichFoo( X x1, X x2) ông cast bất cứ x1, x2 => type X hết nên KQ ra như thế là hiển nhiên thui :) Cách gọi whichFoo như thế thì đâu có vấn đề gì đâu :p, thậm chí ông bỏ static đi nó vẫn chạy