【问题标题】:How come Object class toString get accessed by reference variable of my interface [duplicate]我的接口的引用变量如何访问 Object 类 toString [重复]
【发布时间】:2015-03-24 19:08:20
【问题描述】:
interface My
{
void show();
}

class Child implements My
{
   public void show()
    {
       System.out.println("hello from show");
    }
   public String toString()
    {
       System.out.println("Hello from toString");
       return "hello";
     }
   public static void main(String s[])
     {
        My m = new Child();
        m.show();
        m.toString();         
     }
  }

**上面代码中m是My接口的引用变量,toString()方法是Object类的,已经被Child类覆盖了,但是My类型的引用变量怎么会调用toString()方法(我的接口中不存在 toString 的原型),如果我尝试使用 m 调用 Child 类的其他人员方法,则会出现编译错误,但在这种情况下不会发生。为什么这样? **

【问题讨论】:

    标签: java


    【解决方案1】:

    Java 中的每个对象都是Object 的后代。因此,Object 的公共方法在所有对象中都是可见的,包括数组、匿名对象和所有其他非原始对象。

    Child 中的其他方法不可见,因为 Java 不知道引用是对 Child 类型的。它肯定知道它是Object 的后代,因为所有对象都是。这是引用类型?那么它是Object的后代,无论是通过Child还是其他任何类都无所谓。

    【讨论】:

      【解决方案2】:

      由于永远无法实例化接口,因此您将始终有一个实现该接口的类。由于该类始终扩展Object,您将在每个接口(如equals、toString 等)中获得Object 提供的方法。 否则,您将不得不将接口转换为已知的实现,这不是它背后的想法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-16
        • 1970-01-01
        • 1970-01-01
        • 2015-02-22
        • 2012-10-08
        • 1970-01-01
        相关资源
        最近更新 更多