-1

我对接口的一种情况感到困惑。下面是我没有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());
    }
}
4

7 回答 7

5

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

于 2013-06-17T08:38:40.453 回答
1

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

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

默认情况下接口是否扩展对象?

于 2013-06-17T08:38:24.203 回答
0

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

于 2013-06-17T08:38:33.113 回答
0

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

于 2013-06-17T08:40:09.987 回答
0

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

于 2013-06-17T08:40:34.257 回答
0

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

Object类的接口实例如何访问方法?

于 2013-06-17T08:41:14.557 回答
0

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

于 2013-06-17T08:42:12.593 回答