下面的示例运行没有任何错误,任何人都可以解释我这是如何工作的吗?因为接口不包含任何toString()/ hashcode / equals方法声明编译器将如何解析方法调用?,根据我的理解toString( )/ hashcode / equals或Object类方法默认在接口内声明?如果我错了,请纠正我
接口int1 { public void show(); }
class inttest implements int1
{
public void show()
{
System.out.println("inttest.show()");
}
@Override
public String toString()
{
return "tostring called";
}
}
public class MainClass1
{
public static void main(String[] args) {
int1 i=new inttest();
System.out.println(i.toString());
}
}
答案 0 :(得分:3)
任何接口都具有Object
类的所有公共方法(它可以从超级接口继承它们,或者如果它们尚未明确声明它们,则隐式声明它们)。
这是有道理的,因为任何接口的任何实现类必须是Object
类的(直接或直接)子类,因此将继承所有Object
的实现方法
如果接口没有直接的超接口,那么接口隐式声明一个公共抽象成员方法m,其中包含签名s,返回类型r和throws子句t,对应于具有签名s的每个公共实例方法m,返回类型为r, throws在Object中声明的子句t,除非接口显式声明具有相同签名,相同返回类型和兼容throws子句的抽象方法。
答案 1 :(得分:0)
当所有对象延伸Object
且Object
有toString()
时,您正在调用该方法。