【问题标题】:How the non final method of object class is visible to interface [closed]对象类的非最终方法如何对接口可见[关闭]
【发布时间】:2013-06-17 08:36:48
【问题描述】:

我对接口的一种情况感到困惑。下面是我没有在接口中声明toString()方法的代码。
它是对象类的方法。但是toString()方法仍然可以从父类引用变量中执行。但是规则说在调用子类方法之前它首先查看接口中的方法,如果方法存在则调用子类方法,但在这种情况下 toString() 如何在没有在接口中声明的情况下执行
请解释一下

    public interface Parent {
    void show();
}

class Base implements Parent {
    public void show() {
        System.out.println("hey it is going to be execute");
    }

    public String toString() {
        return "itspossible";
    }

    public static void main(String[] args) {
        Parent parent = new Base();
        System.out.println(parent.toString());
    }
}

【问题讨论】:

    标签: java


    【解决方案1】:

    这是可行的,因为每个类都隐式地扩展了 Object 类。因此,任何接口的任何实现都可以使用toString() 方法。

    【讨论】:

      【解决方案2】:

      这是因为toString 方法包含在每个类派生自的Object 中。正在从Object 类调用该方法。

      我发现 Jon Skeet 回答的这个问题很好地解释了它:

      Does an interface by default extend Object?

      【讨论】:

        【解决方案3】:

        最后,parent 是来自Base 类的对象引用。请注意,所有类都从Object 类扩展而来,因此具有在Object 类中定义的方法,例如toString

        【讨论】:

          【解决方案4】:

          这是因为Object 类是每个类的基类,它包含toString 方法。所以当你用父母的参考调用toString时,它会调用父母的toString().

          【讨论】:

            【解决方案5】:

            变量parent 只是一个引用它的子类型Child。在这里,您正在创建 Child 的对象,默认情况下扩展 Object 类。您正在覆盖 toString 方法,因此给出了这个输出。

            【讨论】:

              【解决方案6】:

              您可能想看看以下discussion。 Java 语言的工作方式就像有一个超级接口,所有接口,包括您评论中的上述接口,以及 Object 类继承自,它声明了 Object 类实现的所有方法。不幸的是,该接口并不真正存在,编译器只是表现得好像它存在一样。

              【讨论】:

                【解决方案7】:

                您没有调用接口的toString 方法,而是调用Bash 类方法。每个对象都有一个toString 方法的默认实现,即使你没有显式实现它。

                How can instance of interface access method of Object class?

                【讨论】:

                  猜你喜欢
                  • 2018-02-20
                  • 1970-01-01
                  • 2010-11-06
                  • 2013-08-28
                  • 2020-05-12
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-01-24
                  • 1970-01-01
                  相关资源
                  最近更新 更多