我遇到了这段代码:
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 的 equals 方法。
-使用对象签名从 BBB 调用方法。
但是它调用带有 BBB 签名的方法,这对我来说很奇怪。
非常感谢您提供有关此代码实际运行方式的反馈,以了解方法调用。 谢谢!
最佳答案
方法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)
。
关于java - 使用各种重写方法调用对象方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35516090/