日期:2014-05-20  浏览次数:20723 次

请教关于Object与接口的关系!~~~~~~~~~
代码:
------------------------------
public   interface   TestObject{

public   void   print();

}
//TestObject是接口

public   class   Main1{
public   static   void   main(String[]   args)   {
TestObject   testObject   =   null;
testObject.toString();

}

}
------------------------------
请教,Object是所有类的基类。也就是说,我们定义的任何类都是Object类的子类。所以我们
可以在我们定义的类中调用在Object类中定义的toString方法。
在接口中,规定所有的的方法都是公共的抽象方法。但是在上面的代码中为什么testObjcet可以
调用Object的toString方法呢。
难道接口也继承了Object吗?后来我写了下面的代码:
public   interface   TestObject   extends   Objcet{

public   void   print();

}
结果是报错!
错误提示是:Objcet   cannot   be   resolved   to   a   type

这说明了接口没有继承Object类。那testObject.toString();怎么解释呢?

------解决方案--------------------
语法是没有错,但是实际这个程序没有意义。
接口就是接口,不是任何类。接口不能生成实例(对象),与Object毫无关系。
注意:Object是所有类的基类,但接口不是类!!

interface TestObject {
public void print();
}

// TestObject是接口
public class Main1 {
public static void main(String[] args) {
// 这句话不会错,因为只是申明一个TestObject类型的变量
// 接口不能生成实例的意思是如果你new TestObject(),那就一定会报错
TestObject testObject = null;

// 由于testObject是申明为接口类型的,所以编译器会假设它是某个类的对象
// 而且这个类实现了TestObject接口,于是当然可以调用Object的方法
// 因为编译器已经假设它是对象了
// 但实际情况,testObject只是null,
// null调用任何方法都会抛NullPointerException
// 所以你这个程序这句话也毫无意义。
testObject.toString();
}

}