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?
 
     
     
    