这个问题在这里已经有答案了:
接口是否继承自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);
}
}
8条答案
按热度按时间tyg4sfes1#
班级
C
工具My
但它也扩展了Object
,正如所有对象最终在其继承树中所做的那样。这个
Object
类没有方法toString()
,以及其他一些人。qfe3c7zg2#
任何
Object
有一个toString()
方法。任何实现接口的东西都会隐式地扩展Object
,所以也会有一个toString()
方法。u91tlkcl3#
java中的每个对象(除了基元类型)都有一个tostring()方法。
kninwzqo4#
之所以能够通过interfce的变量调用该方法,是因为在java中对接口有特殊处理。
即使方法没有在接口中显式声明,特殊处理也会隐式地为类中定义的所有公共示例方法提供声明
Object
. 以及toString
方法就是其中之一。但是,请注意,接口不会隐式扩展任何超级接口(或类),这与隐式扩展
Object
班级。您将在这里找到更好的解释-接口真的继承了java中的对象类吗。
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()
接口引用上的方法vkc1a9a26#
Object
有一个toString()
方法,所以所有东西(除了基元类型)都有一个toString()
方法。java将把任何东西,甚至是空接口,都视为拥有Object
,因为它总是这样。4bbkushb7#
下课以来
Demo
含蓄地extends
班级Object
,它继承了方法toString
. 既然那不是abstract
方法,类Demo
虽然您可以直接调用toString
在…的示例上Demo
. 有关更多信息,请参阅第一课:接口和继承。如合同所述
Object
应用程序编程接口,班级
Object
是类层次结构的根。每个班级都有Object
作为一个超类。所有对象(包括数组)都实现此类的方法。另外,请注意
toString
方法不是接口定义的一部分,而是Object
类定义。bfnvny8b8#
不能调用接口tostring()方法,因为它们只有您声明的方法。
但你可以欺骗系统。每个对象都有一个tostring()方法,很明显,您的接口是由扩展对象的类实现的,所以您也将拥有它。
所以你可以这样做: