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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 唐宋元明清 中级黑马   /  2013-11-16 11:45  /  1260 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 唐宋元明清 于 2013-11-16 22:41 编辑

接口里的方法必须全部是抽象的也就是不能有程序主体。所以子类实现接口时必须要复写父接口中的全部方法。
但是我查 JDK   List接口 下面实现的子类 ArrayList 为什么可以不复写而是直接继承?

List.PNG (93.43 KB, 下载次数: 3)

这个是接口。所以它的子类必须实现这个里面的方法.

这个是接口。所以它的子类必须实现这个里面的方法.

ArrayList.PNG (88.93 KB, 下载次数: 19)

这个是子类,但是这里面没有覆盖接口里的方法。

这个是子类,但是这里面没有覆盖接口里的方法。

疑问.PNG (85.46 KB, 下载次数: 8)

疑问的点就是为什么这里是继承接口的方法而不是实现覆盖父接口的方法?

疑问的点就是为什么这里是继承接口的方法而不是实现覆盖父接口的方法?

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

9 个回复

倒序浏览
意思就是实现了这些接口方法,翻译有点问题
回复 使用道具 举报
你没看到他们中间还夹了一层么,
AbstractCollection实现了Collection
ArrayList继承了这个
回复 使用道具 举报
ArrayList上面还有几个类实现了List里面的方法,然后ArrayList继承了那些实现List接口方法的类,从根本上说这几个方法是从List来的,所以才这样写吧
回复 使用道具 举报
Weix1992 发表于 2013-11-16 17:43
ArrayList上面还有几个类实现了List里面的方法,然后ArrayList继承了那些实现List接口方法的类,从根本上说 ...

ArrayList 类已经明确写出implements List,所以不管ArrayList从别的地方还是哪里继承的任何方法,ArrayList都得覆盖重写List当中的所有方法。
回复 使用道具 举报
习嘻嘻 发表于 2013-11-16 12:25
意思就是实现了这些接口方法,翻译有点问题


为什么实现了List接口里的所有方法,ArrayList子类当中有的表示在上面的方法列表中,有的写在最下面说继承父接口呢?这里分开写的原因是啥呢?
回复 使用道具 举报
本帖最后由 唐宋元明清 于 2013-11-16 22:43 编辑
黑马-付文志 发表于 2013-11-16 20:33
其实这里涉及到了点儿 设计模式的知识,分步理解:1  AbstractCollection 实现了接口Collection,则Abstrac ...


你的意思是,父类实现了一个接口,子类继承父类后,再实现这个接口就不用复写里面的方法了?
interface JieKou{
        public void show();
}

class Fu implements JieKou{
        public void show(){
                System.out.println("Fu...");
        }
}

class Zi extends Fu implements JieKou{
        
}

class Demo{
        public static void main(String[] args){
                Zi z=new Zi();
               
                z.show();
        }
}

这样显然是编译不过去的吧?不管子类再如何继承任何方法,只要它实现接口了,它都是需要复写接口里的方法的。
同理,既然ArrayList  implements List 那么就算ArrayList的父类已经复写了List里的所有方法,ArrayList也得必须复写一遍,就算它通过父类继承了List里面的所有方法,它也得自己复写一遍List里的所有方法。既然ArrayList复写了List里的方法,那么为什么会说是继承List的方法呢?为什么List接口里面的方法在ArrayList里面有的写在列表里,有的写在最下面?


我靠,,我编译了一边,,竟然编译过了,还运行出结果了。。。我晕。
看来我的理解有点问题。。我再仔细想想。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马