接口

时间:2017-01-02 10:49:14

标签: java interface tostring hashcode

下面的示例运行没有任何错误,任何人都可以解释我这是如何工作的吗?因为接口不包含任何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());

    }
}

2 个答案:

答案 0 :(得分:3)

任何接口都具有Object类的所有公共方法(它可以从超级接口继承它们,或者如果它们尚未明确声明它们,则隐式声明它们)。

这是有道理的,因为任何接口的任何实现类必须是Object类的(直接或直接)子类,因此将继承所有Object的实现方法

  

9.2. Interface Members

     

如果接口没有直接的超接口,那么接口隐式声明一个公共抽象成员方法m,其中包含签名s,返回类型r和throws子句t,对应于具有签名s的每个公共实例方法m,返回类型为r, throws在Object中声明的子句t,除非接口显式声明具有相同签名,相同返回类型和兼容throws子句的抽象方法。

答案 1 :(得分:0)

当所有对象延伸ObjectObjecttoString()时,您正在调用该方法。