java接口有tostring方法吗?

4urapxun  于 2021-07-09  发布在  Java
关注(0)|答案(8)|浏览(535)

这个问题在这里已经有答案了

接口是否继承自java中的对象类(7个答案)
默认情况下接口是否扩展对象[重复](3个答案)
三年前关门了。
怎么可能打电话 toString 方法使用接口的参考变量 Test ,它没有 toString 方法?

interface Test
{
    void show();
    String toHi();
}
class Demo implements Test
{
    public void show(){
        System.out.println("Show");
    }
    public String toString(){
        return "Hello"; 
    }
    public String toHi(){
        return "Hi";    
    }

    public static void main(String[] args) 
    {
        Test t=new Demo();
        String s=t.toString();
        System.out.println(s);
    }
}
tyg4sfes

tyg4sfes1#

班级 C 工具 My 但它也扩展了 Object ,正如所有对象最终在其继承树中所做的那样。
这个 Object 类没有方法 toString() ,以及其他一些人。

qfe3c7zg

qfe3c7zg2#

任何 Object 有一个 toString() 方法。任何实现接口的东西都会隐式地扩展 Object ,所以也会有一个 toString() 方法。

u91tlkcl

u91tlkcl3#

java中的每个对象(除了基元类型)都有一个tostring()方法。

kninwzqo

kninwzqo4#

之所以能够通过interfce的变量调用该方法,是因为在java中对接口有特殊处理。
即使方法没有在接口中显式声明,特殊处理也会隐式地为类中定义的所有公共示例方法提供声明 Object . 以及 toString 方法就是其中之一。
但是,请注意,接口不会隐式扩展任何超级接口(或类),这与隐式扩展 Object 班级。
您将在这里找到更好的解释-接口真的继承了java中的对象类吗。

jk9hmnmh

jk9hmnmh5#

java文档说。。。 When an interface has no direct SuperInterface, it will create abstract public method for all those public methods present in the Object class .
这就是为什么你可以打电话给 toString() 接口引用上的方法

vkc1a9a2

vkc1a9a26#

Object 有一个 toString() 方法,所以所有东西(除了基元类型)都有一个 toString() 方法。java将把任何东西,甚至是空接口,都视为拥有 Object ,因为它总是这样。

4bbkushb

4bbkushb7#

下课以来 Demo 含蓄地 extends 班级 Object ,它继承了方法 toString . 既然那不是 abstract 方法,类 Demo 虽然您可以直接调用 toString 在…的示例上 Demo . 有关更多信息,请参阅第一课:接口和继承。
如合同所述 Object 应用程序编程接口,
班级 Object 是类层次结构的根。每个班级都有 Object 作为一个超类。所有对象(包括数组)都实现此类的方法。
另外,请注意 toString 方法不是接口定义的一部分,而是 Object 类定义。

bfnvny8b

bfnvny8b8#

不能调用接口tostring()方法,因为它们只有您声明的方法。
但你可以欺骗系统。每个对象都有一个tostring()方法,很明显,您的接口是由扩展对象的类实现的,所以您也将拥有它。
所以你可以这样做:

public static void main(String[] args) 
    {
        My m=new C();
        String s= m + ""; // the toString() of the C class will be called here
        System.out.println(s);
    }

相关问题