使用各种重写方法调用的对象方法

时间:2016-02-19 22:15:44

标签: java polymorphism override

我遇到了这段代码:

public class AAA
{
       protected int _num;
       public AAA()
        {
            _num=2;
        }
       public boolean equals(Object other)
       {
           System.out.println("objectA");
           return true;
        }
}
public class BBB extends AAA
{
    String st;
   public BBB()
        {
           st="bbb";
        }
   public boolean equals(Object other)
        {
        System.out.println("objectB");
        return true;
        }
   public boolean AAA(AAA other)
        {
        System.out.println("AAA");
        return true;
        }
   public boolean BBB(BBB other)
        {
        System.out.println("BBB");
        return true;
        }
}
public class Driver15a
{
    public static void main(String args[])
        {   
            AAA ab=new BBB();
            BBB b1=new BBB();
            if(ab.equals(ab)) System.out.println(6);
}
}

我希望ab能够:

- 使用等于的AAA方法。

- 使用对象签名从BBB调用方法。

然而,它使用BBB签名调用该方法,这对我来说很奇怪。

非常感谢您对此代码如何实际运行以了解方法调用的反馈。 谢谢!

1 个答案:

答案 0 :(得分:1)

方法public boolean AAA(AAA)public Boolean BBB(BBB)与此无关。如果我将其切换回显示正在发生的事情所需的最少量代码:

public class AAA
{
    public boolean equals(Object other)
    {
        System.out.println("objectA");
        return true;
    }
}

public class BBB extends AAA
{
    public boolean equals(Object other)
    {
        System.out.println("objectB");
        return true;
    }
}

public static void main(String args[])
{   
    AAA ab=new BBB();
    ab.equals(ab);
}

这是多态性的基本例子。 BBB.equals(Object)会覆盖AAA.equals(Object),因此当您致电ab.equals(ab)时,会找到覆盖率最高的版本BBB.equals(Object)