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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Uncle.Lee 中级黑马   /  2013-11-10 20:37  /  1154 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Uncle.Lee 于 2013-11-11 12:49 编辑

记得前面看过:类在实现接口的时候要复写接口中所有的方法。。

但是最近查阅API文档却发现有些实现接口的类,所包含的方法却没有接口里的方法多;

例如:HashSet类实现了Set接口,我数了一下Set接口有15个方法,而HashSet类却只有8个方法,
        如果如前面所学的类在实现接口的时候要复写接口中所有的方法,那么HashSet类至少要有15个方法  才对啊。。

谁能告诉我这是怎么了?

3 个回复

倒序浏览
只有接口中的抽象方法才需要实现,不是每个方法都需要重写啊
回复 使用道具 举报
二楼的说法有误,抽象类是可以有普通方法的,但接口中的方法,必须都是抽象的。
一楼的误区是,定义方法时,是有修饰符的,接口的成员修饰符默认为publid abstract
不是HashSet 的方法少,是它继承Set接口的方法没有都罗列出来,Api里通常写子类的
特有方法。
HashSet有一个直接父类AbstractSet。这个父类也实现了Set接口。Set接口中的方法,都在这个父类中被
重写了。所以HashSet类继承了AbstractSet父类,自然就继承了它中的方法。所以,你看Api里,没看到那么全,
里面写的都是其特有的方法。
回复 使用道具 举报
必须实现全部方法,但是不知道HashSet具体是怎样实现的,但是有一些方法可以借鉴
先用一个类实现这个接口 但是在这个类中方法都是空的{}这样  然后可以继承这个类 用新的方法来覆盖那些空的方法  在GUI编程中有一个适配器的概念 就是这样的
比如有一个接口 B
现在我用一个类A实现这个接口   并实现全部方法 但方法体是空的
class A implements  B
{
public void f1()


publicvoid f2()


publicvoid f2()


其他方法。。。。。
}
如果现在我要用的类需要实现B的话 但我又不想实现B中的全部方法 我就可以直接继承A
并实现我需要的方法 如
class C extends B

    public void f1()
   {
      具体的代码;
    }
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马