请教关于Object与接口的关系!~~~~~~~~~

fluagen 2007-08-24 12:07:21
代码:
------------------------------
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();怎么解释呢?
...全文
264 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
JamesLiu 2009-01-29
  • 打赏
  • 举报
回复
http://blog.csdn.net/jamesliulyc/archive/2009/01/27/3853839.aspx
JamesLiu 2009-01-26
  • 打赏
  • 举报
回复
/**Java问题
*环境JDK5.0
*问题:接口和Object类是不是有什么隐藏关系
*就像Object类也会有私生子(开玩笑的),sun公司
*是不是在接口和Object做了点"手脚"
*/
public class TestInterFace {
public static void main(String[] args) {
A test = new B();
/**
*接口A中未定义toString()方法
*toString()属于类Object中的方法
*但是通过A的引用可以调用Object中的
*方法,而接口是不可以继承类的
*
*
*/
System.out.println(test.toString());
/**
* A中未有print(),故A的引用去调用print()方法
*在编译期会报错
*/
//test.print()

}
}
//接口A
interface A { }
//类B用来实现接口A
class B implements A {
public void print() {
System.out.print("error");
}
}
fluagen 2007-08-24
  • 打赏
  • 举报
回复
pkroseA()

接口没有继承Object类。上面的代码也说明了!
fluagen 2007-08-24
  • 打赏
  • 举报
回复
Object 改过来后 同样报错

错误提示是:The type Object cannot be a superinterface of TestObject; a superinterface must be an interface
pkroseA 2007-08-24
  • 打赏
  • 举报
回复
还有就是你自已的接口可以继承多个接口,声明的方式就是用extends,也就是说,接口
是可以多继承的,不过只可以继承其他接口。
zdjray 2007-08-24
  • 打赏
  • 举报
回复
Object 写错了..
pkroseA 2007-08-24
  • 打赏
  • 举报
回复
类 Object 是类层次结构的根类。每个类都使用 Object 作为超类。toString()方法是类 Object中11个方法中的一个,所以无论是什么类都有toString()方法。
liky5387 2007-08-24
  • 打赏
  • 举报
回复
TO:lfcai
你对类概念还不明白。
只要是一个
bin9988664 2007-08-24
  • 打赏
  • 举报
回复
学习
lfcai 2007-08-24
  • 打赏
  • 举报
回复
接口不是何类。接口不能生成实例(对象),与Object毫无关系。
liky5387 2007-08-24
  • 打赏
  • 举报
回复
public class Test implements TestOjbice {
public void print(){
System.out.print("Test Object");
}
public static void main(String[] args) {
TestOjbice tO = null;
tO.toString();//这里testObject是null它会报空指针异常,


tO = new Test();

tO.print();
tO.toString(); //这里,才真正的调用了Object的toString()方法.
}
}
}
只要是一个类,不管他是什么类,他都会以Object作为超类.
边城狂人 2007-08-24
  • 打赏
  • 举报
回复
接口只能从接口继承,不能从类继承,比如

interface Interface {
public void test();
}

interface TestObject extends Interface {
public void print();
}
边城狂人 2007-08-24
  • 打赏
  • 举报
回复
语法是没有错,但是实际这个程序没有意义。
接口就是接口,不是任何类。接口不能生成实例(对象),与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();
}

}
wuhaozhiyuan 2007-08-24
  • 打赏
  • 举报
回复
你上面的代码可以运行吗?
在我这是报错的
interface TestObject{
public void print();
}
//TestObject是接口

public class Main1{
public static void main(String[] args) {
TestObject testObject = null;
testObject.toString();//这里testObject是null它会报空指针异常
}
}

异常:
Exception in thread "main" java.lang.NullPointerException
at base.Main1.main(Main1.java:13)
我觉得是 要想使用接口就必须用一个类来实现它.
然后这个类就不再是接口了,所以它拥有了toString()方法
至于接口有没有我不清楚.

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧