2016-02-19 78 views
0

我就遇到了這個代碼調用:對象的方法有多種重載方法

public class AAA 
{ 
     protected int _num; 
     public AAA() 
     { 
      _num=2; 
     } 
     public boolean equals(Object other) 
     { 
      System.out.println("objectA"); 
      return true; 
     } 
} 
public class BBB extends AAA 
{ 
    String st; 
    public BBB() 
     { 
      st="bbb"; 
     } 
    public boolean equals(Object other) 
     { 
     System.out.println("objectB"); 
     return true; 
     } 
    public boolean AAA(AAA other) 
     { 
     System.out.println("AAA"); 
     return true; 
     } 
    public boolean BBB(BBB other) 
     { 
     System.out.println("BBB"); 
     return true; 
     } 
} 
public class Driver15a 
{ 
    public static void main(String args[]) 
     { 
      AAA ab=new BBB(); 
      BBB b1=new BBB(); 
      if(ab.equals(ab)) System.out.println(6); 
} 
} 

我希望AB要麼:平等的

次使用的AAA方法。

-從BBB和對象簽名中調用該方法。

但是它調用了BBB簽名的方法,這對我來說很奇怪。

希望您對本代碼如何運行以瞭解方法調用有所反饋。 謝謝!

+0

如果我對你之前的問題的回答不夠清楚,你所要做的就是要求我詳細說明 –

回答

1

方法public boolean AAA(AAA)public Boolean BBB(BBB)與此無關。如果我將其縮回到顯示正在發生的事情所需的最小代碼量:

public class AAA 
{ 
    public boolean equals(Object other) 
    { 
     System.out.println("objectA"); 
     return true; 
    } 
} 

public class BBB extends AAA 
{ 
    public boolean equals(Object other) 
    { 
     System.out.println("objectB"); 
     return true; 
    } 
} 

public static void main(String args[]) 
{ 
    AAA ab=new BBB(); 
    ab.equals(ab); 
} 

這是多態性的基本示例。 BBB.equals(Object)覆蓋AAA.equals(Object),因此當您撥打ab.equals(ab)時,它會找到最重寫的版本BBB.equals(Object)