Câu hỏi về polymorphism, Java

Thảo luận trong 'Lập trình & Đồ hoạ' bắt đầu bởi CụXê, 5/4/07.

  1. CụXê

    CụXê Legend of Zelda

    Tham gia ngày:
    25/1/07
    Bài viết:
    1,005
    Nơi ở:
    bản Kà To
    PHP:
    public class {
      public 
    void foo(X x){
        
    System.out.println("X.X");
      }
      public 
    void foo(Y x){
        
    System.out.println("X.Y");
      }
    }
    PHP:
    public class 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 x1X x2){
        
    x1.foo(x2);
      }
    public static 
    void main (String[] args){
        
    X x = new X();
        
    Y y = new Y();
        
    whichFoo(xx);
        
    whichFoo(xy);
        
    whichFoo(yx);
        
    whichFoo(yy);
      }
    }
    mọi người bảo chương trình sẽ in ra những cái gì, vì sao :-?
     
  2. ZeroCrazy

    ZeroCrazy T.E.T.Я.I.S

    Tham gia ngày:
    8/4/06
    Bài viết:
    516
    Nơi ở:
    hỏi làm chi ?
    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).
     
  3. Dark_XIII

    Dark_XIII T.E.T.Я.I.S

    Tham gia ngày:
    17/4/03
    Bài viết:
    688
    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. =))
     
  4. CụXê

    CụXê Legend of Zelda

    Tham gia ngày:
    25/1/07
    Bài viết:
    1,005
    Nơi ở:
    bản Kà To
    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
     
  5. ack

    ack Donkey Kong

    Tham gia ngày:
    11/1/06
    Bài viết:
    462
    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 :D
     

Chia sẻ trang này