JAVA多态与调用栈

问题描述 投票:0回答:0

如果我有接下来的 3 节课:

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 ;
    }
}
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)// 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)  // 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) // 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(a1.equals(a2));
        System.out.println(a2.equals(b1));
    }
}

Driver类中第一个和第二个equals方法使用的调用栈是什么, 根据我对多态性的理解,方法 1 将在两种情况下使用,但出于不同的原因。 由于在第二种情况下最合适,在第一种情况下由于覆盖。 我说得对吗?

java polymorphism overriding equals
© www.soinside.com 2019 - 2024. All rights reserved.