java中接口是否继承了Object类

我个人认为是第三种情况,即不是继承,也不是没继承.也就是悖论
小明有一天说:“我正在撒谎!”问小明到底撒谎还是说实话。
这个是一个经典的罗素悖论,其实现实之中的集合还是没办法排除这种悖论的,而且这种可能在现实生活中也不实用,了解一下就可以了.
首先我先复习了一下接口的一些特性.
1.接口是没有构造方法的.
2.接口的值都是公共静态常量.
3.接口没有方法体.
4.只能继承接口,不能实现接口,也不能继承类
关于是否继承Object,需要关注于第一个特性,接口并没有构造方法.

public class Zi implements Inter{
	public Zi(){
		super();
	}
}

以这个代码为例,我们分析一下代码执行的顺序,首先是因为为了阅读性,我把默认的super();写进了代码.
Inter in=new Zi();
in.toString();
这个语句是会执行的,所以我们可以看出in这个对象里面是有toString的方法的,按照这么说的话,那么这个接口就是继承了Object类了?
那么就出现了一个问题,如果说接口继承了Object,那么就违反了接口的第四条规则,并且如果在接口中定义了Object的方法,但是在方法上写了@Override,就会报错.所以接口就不是继承了Object类?毕竟如果继承了Object类,那么覆盖重写注解@Override就不会报错
那么,在两种都出现矛盾的时候,我跳出了继承跟没继承的想法,我认为产生了第三种情况,不是继承也不是没继承,这其实也是一个经典的悖论.

public interface Inter extends Object{
	
}

并且代码如果这么写的话,系统会报错,所以,在这方面来说,接口并没有继承Object.
在执行这条语句的时候,先执行zi的构造方法,然后执行super();这个时候执行的是Object的构造方法.这个时候,子类的对象创建完毕,然后我们将这个对象转换成接口的对象.并没有去创建一个接口对象.所以这里不会调用两次Object的构造方法.


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值