如果我有接下来的 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 将在两种情况下使用,但出于不同的原因。 由于在第二种情况下最合适,在第一种情况下由于覆盖。 我说得对吗?