黑马程序员技术交流社区

标题: 接口到底是不是Object的子类??? [打印本页]

作者: osully    时间: 2014-3-29 07:30
标题: 接口到底是不是Object的子类???

接口到底是不是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. }
复制代码




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

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

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

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

jj.PNG

作者: 雪碧拌米饭    时间: 2014-3-30 13:06
我认为应该属于一种特殊的抽象类吧
作者: 安彦宇    时间: 2014-6-15 15:26
我了半天我想知道到底结论是什么?
作者: 随风而去    时间: 2014-6-16 06:59
接口就是接口,只不过在jdk中,所有的实现类默认继承了Object类,这个是写在虚拟机当中的
只有在虚拟机为实体类生成classes文件的时候默认基础的,你可以当作Object是一个隐藏的父类
有时候面试会问这样的问题,接口继承了Object类么或者接口是Object的子类么?
如果还是不清楚,就自己去看看jdk中的超级接口
比如List接口 IO流接口  然后再看看他们的实现类 分别是怎么描述的

作者: menner    时间: 2014-12-20 13:37
本帖最后由 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
应该是生成了一个匿名内部类实例。
作者: l763631191    时间: 2014-12-20 16:53
接口当然继承了Object  
作者: lgc黑马    时间: 2014-12-26 21:23
应该不是,接口不会继承类
作者: yangzelin    时间: 2015-12-11 20:58
接口没有构造方法(不是类的特征),但它可以使用object里的方法。所以接口是类的特殊体现形式。
作者: 793725051    时间: 2015-12-12 22:24
是的...........
作者: huqianqian    时间: 2016-1-1 21:15
也可以百度!
作者: 李永佳    时间: 2016-1-5 10:34
"接口隐含定义了一套与Object类中的方法签名完全相同的方法,所以,我们在程序中调用接口的那些与Object中具有相同签名的方法时,编译器不会报错!"
作者: ts5210ts    时间: 2016-10-7 03:12
我是这么理解的。
首先,接口和类是并行关系,接口可以继承接口,不能继承类,所以它不是Object的子类。
其次,解释一下为什么能用toString()方法。这个问题应该分两步,第一步,编译为什么能通过?因为接口a调用方法,最终执行看的还是接口a指向的实现类对象。所以你在编译的时候,虚拟机也不能确定接口a的实现类对象到底有没有这个方法,所以编译肯定是能通过的。  第二步,为什么执行也没有报错?这个就很简单了,执行的时候看的是实现类对象,既然是类对象了,肯定继承了toString()方法的嘛!
个人看法,仅供参考。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2