我正在研究以下代码并尝试更好地理解JAVA中的多态性,我无法理解它。有人可以帮忙吗?
AA类:
public class AA
{
private int _val=0;
public AA()
{
_val=5;
}
public AA(int val)
{
_val=val;
}
public int getVal()
{
return _val;
}
public void setVal(int val)
{
_val=val;
}
public String toString()
{
return "val=" + _val ;
}
}
BB级:
public class BB extends AA
{
private String _st;
public BB ()
{
_st="bb";
}
public BB(String st, int val)
{
super(val);
_st=st;
}
public String getSt()
{
return _st;
}
public boolean equals (Object ob)
{
System.out.println("Method 1");
if ((ob != null) && (ob instanceof BB))
{
if (_st.equals(((BB)ob)._st) &&
(getVal() == ((BB)ob).getVal()))
return true;
}
return false;
}
public boolean equals (AA ob)
{
System.out.println("Method 2");
if ((ob != null) && (ob instanceof BB))
{
if (_st.equals(((BB)ob)._st) &&
(getVal() == ((BB)ob).getVal()))
return true;
}
return false;
}
public boolean equals (BB ob)
{
System.out.println("Method 3");
if (ob != null)
{
if (_st.equals(((BB)ob)._st) &&
(getVal() == ((BB)ob).getVal()))
return true;
}
return false;
}
}
测试人员:
public class Driver
{
public static void main (String [] args)
{
AA a1 = new AA();
AA a2 = new BB();
AA a3 = new AA();
AA a4 = new BB();
BB b1 = new BB();
BB b2 = new BB();
System.out.println(a4.equals(a2));
}
}
当我运行以下代码时,运行的方法是BB的等号(Object ob);我不明白为什么。
如果我摆脱了equals(Object ob)方法,那么运行的方法是Object类等于。
如果我将方法equals(AA ob)添加到AA类,那么实际运行的方法是BB等于(AA ob);
有人可以向我解释这里的逻辑吗?