对象类的非final方法如何对接口可见

时间:2013-06-17 08:36:49

标签: java

我对interface的一个场景很困惑.Below是我没有在界面中声明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());
    }
}

7 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

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

我发现Jon Skeet回答了这个问题并解释得很好:

Does an interface by default extend Object?

答案 2 :(得分:0)

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

答案 3 :(得分:0)

这是因为Object类是每个类的基类,它包含toString方法。因此,当您使用父母的引用来呼叫toString时,它会调用父级的toString().

答案 4 :(得分:0)

变量parent只是一个引用其子类型Child的引用。在这里,您要创建一个Child对象,默认情况下会扩展Object类。您正在覆盖toString方法,从而提供此输出。

答案 5 :(得分:0)

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

How can instance of interface access method of Object class?

答案 6 :(得分:0)

您可能需要查看以下discussion。 Java语言就好像有一个超级接口,所有接口,包括评论中的一个接口,以及Object类继承,它声明了Object类实现的所有方法。不幸的是,该接口并不存在,编译器的行为就好像存在一样。