我遇到了这段代码:
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)
。