我对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());
}
}
答案 0 :(得分:5)
这是有效的,因为每个类都隐式扩展Object
类。因此,任何接口的任何实现都可以使用toString()
方法。
答案 1 :(得分:1)
因为toString
方法包含在每个类派生自的Object
中。该方法是从Object
类调用的。
我发现Jon Skeet回答了这个问题并解释得很好:
答案 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
类实现的所有方法。不幸的是,该接口并不存在,编译器的行为就好像存在一样。