黑马程序员技术交流社区

标题: 关于实现接口的类的疑惑 [打印本页]

作者: Uncle.Lee    时间: 2013-11-10 20:37
标题: 关于实现接口的类的疑惑
本帖最后由 Uncle.Lee 于 2013-11-11 12:49 编辑

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

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

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

谁能告诉我这是怎么了?
作者: hurryup    时间: 2013-11-10 20:50
只有接口中的抽象方法才需要实现,不是每个方法都需要重写啊
作者: 起猿    时间: 2013-11-10 21:16
二楼的说法有误,抽象类是可以有普通方法的,但接口中的方法,必须都是抽象的。
一楼的误区是,定义方法时,是有修饰符的,接口的成员修饰符默认为publid abstract
不是HashSet 的方法少,是它继承Set接口的方法没有都罗列出来,Api里通常写子类的
特有方法。
HashSet有一个直接父类AbstractSet。这个父类也实现了Set接口。Set接口中的方法,都在这个父类中被
重写了。所以HashSet类继承了AbstractSet父类,自然就继承了它中的方法。所以,你看Api里,没看到那么全,
里面写的都是其特有的方法。

作者: 赵许星    时间: 2013-11-11 10:29
必须实现全部方法,但是不知道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()
   {
      具体的代码;
    }





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