A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© osully 金牌黑马   /  2014-3-29 07:30  /  11193 人查看  /  16 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


接口到底是不是Object的子类,
很多人都说什么接口与类 是并行的,那为什么接口用能使用Object的方法呢???
大家来发表自己的看法吧........

  1. //接口到底是不是Object的子类
  2. interface MyInterface{
  3.         public void show();
  4. }

  5. public class InterfaceExtendsObject {
  6.         public static void main(String[] args) {
  7.                 new MyInterface(){
  8.                         public void show(){
  9.                                
  10.                         }
  11.                 }.toString(); //如果不是,为什么接口可以用object类的方法?
  12.         }
  13. }
复制代码



评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 神马都是浮云

查看全部评分

16 个回复

倒序浏览
zengming13 发表于 2014-3-29 08:33
接口中都是抽象方法,不能直接使用,要生成实例必需由类来实现,不管接口是否继承Object ,只要是类肯定继 ...

父类接口引用指向子类对象, 只能使用父类接口中的方法

如果接口没有继承object  哪来的toString呢?
回复 使用道具 举报
java不允许多重继承,然后使用接口作为替代品,这样的接口只是“类的受限描述”而不是类,从概念上说就不允许派生自某个类,所以不存在“接口继承Object类”。
回复 使用道具 举报
  Object:超类,根类。是所有事物向上抽取而形成,里面定义了一些我们会用到的基本方法,比如toString()。我们用的所有的类都会直接或者间接继承Object。
   其实interfce是一个抽象的东西,他的出现方便了我们描述一些子类共性的东西。它里面都是一些抽象的方法,故interface 不能创建对象。要使用借口必须创建子类对象并复写接口的所有抽象方法。
      因此  抽象的  interfce不是  实类  向上抽取而得的Object的子类。如果说interface是Object的子类,那么一个interface必须能够继承Object 并且一定有Object的共性,也就是说 抽象的interface一定是一个实类。这很明显违背了接口的性质。所以我认为不是
  不晓得回答的对不对。各位高手批评指正啊。。。
回复 使用道具 举报
在java中,一切事物皆对象。而object是一切类的超类。。。而接口是一个抽象类,需要子类实现具体方法。所以接口是object的子类。c:\jj.png

jj.PNG (49.51 KB, 下载次数: 333)

jj.PNG
回复 使用道具 举报
我认为应该属于一种特殊的抽象类吧
回复 使用道具 举报
我了半天我想知道到底结论是什么?
回复 使用道具 举报
接口就是接口,只不过在jdk中,所有的实现类默认继承了Object类,这个是写在虚拟机当中的
只有在虚拟机为实体类生成classes文件的时候默认基础的,你可以当作Object是一个隐藏的父类
有时候面试会问这样的问题,接口继承了Object类么或者接口是Object的子类么?
如果还是不清楚,就自己去看看jdk中的超级接口
比如List接口 IO流接口  然后再看看他们的实现类 分别是怎么描述的
回复 使用道具 举报
menner 初级黑马 2014-12-20 13:37:35
9#
本帖最后由 menner 于 2014-12-20 13:41 编辑

//接口到底是不是Object的子类
interface MyInterface{
        public void show();
}

public class InterfaceExtendsObject {
        public static void main(String[] args) {
                System.out.println(new MyInterface(){
                        public void show(){

                        }
                }.toString()); //如果不是,为什么接口可以用object类的方法?
        }
}

第一次执行:InterfaceExtendsObject$1@328d5485
第二次执行:InterfaceExtendsObject$1@328d5485
第三次执行:InterfaceExtendsObject$1@5ca801b0
第四次执行:InterfaceExtendsObject$1@5ca801b0
第五次执行: InterfaceExtendsObject$1@665ea4c5
多运行几次还会有不同的结果。


回复 使用道具 举报
menner 初级黑马 2014-12-20 13:40:12
10#
应该是生成了一个匿名内部类实例。
回复 使用道具 举报
接口当然继承了Object  
回复 使用道具 举报
应该不是,接口不会继承类
回复 使用道具 举报
接口没有构造方法(不是类的特征),但它可以使用object里的方法。所以接口是类的特殊体现形式。
回复 使用道具 举报
是的...........
回复 使用道具 举报
也可以百度!
回复 使用道具 举报
"接口隐含定义了一套与Object类中的方法签名完全相同的方法,所以,我们在程序中调用接口的那些与Object中具有相同签名的方法时,编译器不会报错!"
回复 使用道具 举报
我是这么理解的。
首先,接口和类是并行关系,接口可以继承接口,不能继承类,所以它不是Object的子类。
其次,解释一下为什么能用toString()方法。这个问题应该分两步,第一步,编译为什么能通过?因为接口a调用方法,最终执行看的还是接口a指向的实现类对象。所以你在编译的时候,虚拟机也不能确定接口a的实现类对象到底有没有这个方法,所以编译肯定是能通过的。  第二步,为什么执行也没有报错?这个就很简单了,执行的时候看的是实现类对象,既然是类对象了,肯定继承了toString()方法的嘛!
个人看法,仅供参考。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马