返回信息流RT,
如果不是的话,父类接口引用指向子类对象, 只能使用父类接口中的方法,如果接口没有继承object 哪来的toString呢?
这是一条镜像帖。来源:北邮人论坛 / java / #52150同步于 2016/8/3
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
请问接口是不是Object的子类??
johnson123
2016/8/3镜像同步12 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
那请问你这样一个问题
Comparable c = "nihao";
Object a = c;
为什么一个接口引用可以给超类object的引用赋值?
不是只有Object类及其子类才可以对其赋值吗?
【 在 nuanyangyang 的大作中提到: 】
:
: Object没有实现任何接口。
以及类似的,c应该只能使用接口中的方法,如果不是继承object类,以下语句编译为什么不会出错?
Comparable c = "nihao";
c.toString();
【 在 nuanyangyang 的大作中提到: 】
:
: Object没有实现任何接口。
【 在 johnson123 的大作中提到: 】
: 那请问你这样一个问题
: 以及类似的,c应该只能使用接口中的方法,如果不是继承object类,以下语句编译为什么不会出错?
想把c赋值给a,只需要保证Comparable是Object的一个“子类型”(subtype)就可以了,不一定是“子类”(subclass)。
Java如此定义“子类型”:https://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html#jls-4.10
对于基本类型,byte < short < int < long < float < double,其中小于号表示“子类型”。
对于不带泛型的引用类型来说,
1. 一个类的直接超类(direct superclass)是它的直接超类型(direct supertype)
2. 一个类的直接超接口(direct superinterface)是它的直接超类型(direct supertype)
3. 如果一个接口没有任何直接超接口,那么Object是这个接口的直接超类型(direct supertype)
然后“超类型”关系就是“直接超类型”关系的传递闭包。对于有泛型参数的类型来说也有类似的规则。
所以对于这个例子来说,Comparable<T>是接口,但没有任何直接超接口,所以Object是它的超类型。所以,赋值是合法的。
【 在 johnson123 的大作中提到: 】
: 以及类似的,c应该只能使用接口中的方法,如果不是继承object类,以下语句编译为什么不会出错?
: [code=java]
: Comparable c = "nihao";
: ...................
Java里所有的引用类型都继承自Object。正如“超类型”的定义中,Object是所有接口类的超类型。