重写方法 - JAVA多态性

时间:2017-11-26 16:34:49

标签: inheritance polymorphism

我正在研究以下代码并尝试更好地理解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);

有人可以向我解释这里的逻辑吗?

0 个答案:

没有答案