Class Paren contains only an int.
public class Paren
{
private int _val=0;
public Paren()
{
_val=10;
}
public Paren(int val)
{
_val=val;
}
public String toString()
{
return "val=" + _val ;
}
}
Class Chil extends class Paren, also contains a String and overloads the equals method 3 times: 1. takes an Object parameter 2. takes a Paren parameter 3. takes a Chil parameter
public class Chil extends Paren
{
private String _st;
public Chil()
{
_st="child";
}
public Chil(String st, int val)
{
super(val);
_st=st;
}
public String getSt()
{
return _st;
}
public boolean equals (Object ob)
{
if ((ob != null) && (ob instanceof Chil))
{
if (_st.equals(((Chil)ob)._st) &&
(getVal() == ((Chil)ob).getVal()))
return true;
}
return false;
}
public boolean equals (Paren ob) // shita 2
{
if ((ob != null) && (ob instanceof Chil))
{
if (_st.equals(((Chil)ob)._st) &&
(getVal() == ((Chil)ob).getVal()))
return true;
}
return false;
}
public boolean equals (Chil ob)
{
if (ob != null)
{
if (_st.equals(((Chil)ob)._st) &&
(getVal() == ((Chil)ob).getVal()))
return true;
}
return false;
}
}
I instantiate objects thusly:
Paren A = new Chil();
Chil B = new Chil();
A polymorphically holds a Chil object. When I call
A.equals(B)
the call jumps to 1. equals() that takes an Object parameter
If A is a Chil and B is a Chil, why doesn't it go to the equals() that takes a Chil parameter?