关于extends和implements

Times2001 2005-03-04 03:01:02
J2SDK中,有很多是这样的结构
AbstractClassA implements InterfaceA

ClassA extends AbstractClassA implements InterfaceA


我不明白,ClassA 继承了AbstractClassA ,而AbstractClassA 又实现了InterfaceA,那ClassA为什么还有实现InterfaceA呢?不是多此一举嘛?

...全文
636 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
Times2001 2005-03-07
  • 打赏
  • 举报
回复
我也觉得,只是为了看文档的人更直观的了解类实现了哪些接口!
有没有人持不同意见?没有我就结帖了!
cadyboycool 2005-03-06
  • 打赏
  • 举报
回复
个人认为。
nwpulipeng 2005-03-06
  • 打赏
  • 举报
回复
同意各位大侠所说:)
star_str 2005-03-05
  • 打赏
  • 举报
回复
java允许单继承类,但是可以多继承接口!
jinxfei 2005-03-05
  • 打赏
  • 举报
回复
说强制实现接口里方法的人怎么回事,难道类签名中有implements接口就一定必须实现接口中的方法吗?
错了,只要父类有实现就可以了。

同意楼上,这样写比较直观,对于这个类的实用者来讲,比较明了,尤其是不看javadoc而直接读代码的人。

另外,我觉得这样的话也可以保证接口的稳定,比如extends的父类不再实现该接口了,子类还可以不用变更。

不知有没有道理,我估计这也是一种best practice吧.
cuilichen 2005-03-05
  • 打赏
  • 举报
回复
为了保证可视性吧,在使用的时候,我们可以直观的看到类继承了什么,实现了什么接口。
还有就是以防万一吧,在这里可以提醒程序员,需要做的事情。
1979xt 2005-03-04
  • 打赏
  • 举报
回复
习惯如此吧
birdhaha 2005-03-04
  • 打赏
  • 举报
回复
个人理解还是因为AbstractClassA 只实现了InterfaceA的一部分方法,而ClassA 则要实现别一部分。
Times2001 2005-03-04
  • 打赏
  • 举报
回复
SUN的人来这里嘛?他们设计jdk的时候为什么要这么设计啊?
说好不能打脸 2005-03-04
  • 打赏
  • 举报
回复
各位各位,也许小弟理解有误,或者是小弟还不够火候,不过楼上说"这样是强制重构的大哥们好像说错了"
请看以下代码:

public interface InterfaceA{
public void doSomeThing1();
public void doSomeThing2();
}


public abstract class AbstractClassA implements InterfaceA{
public void doSomeThing1(){

}
}

public class ClassA extends AbstractClassA implements InterfaceA{
public void doSomeThing2(){

}

public static void main(String[] src){
new ClassA();
}
}

此段代码可以正常运行,也就是说我不用在ClassA中强制重构doSomeThing1()这个方法,
个人认为就我现在的理解能力,这样写是多此一举
fightboy 2005-03-04
  • 打赏
  • 举报
回复
1.为什么要,强迫你重写AbstractClassA中的方法。什么情况下需要这么做。
2.靠Coder自律做不到么?
Times2001 2005-03-04
  • 打赏
  • 举报
回复
Dan1980(String someGoodAdvices):
public class ClassB extends AbstractClassA implements InterfaceA {
public void m1() { } //尽管m1已经在父类中实现了, 但仍然需要再次实现
public void m2() { } //因为再次implements了接口
}
我写成
public class ClassB extends AbstractClassA{
public void m1() { } //我直接重写这个方法啊
public void m2() { }
}
同样可以达到效果啊
Dan1980 2005-03-04
  • 打赏
  • 举报
回复
嗯, 这样做还是有意义的. 比如:

//InterfaceA.java
public interface InterfaceA {
void m1();
void m2();
}

//AbstractClassA.java
public abstract class AbstractClassA implements InterfaceA {
public void m1() { } //实现了m1, 但没有实现m2
}

//ClassA.java
public class ClassA extends AbstractClassA {
public void m2() { } //只实现父类中没有实现的m2就行了, 因为m1已经在父类中实现了
}

//ClassB.java
public class ClassB extends AbstractClassA implements InterfaceA {
public void m1() { } //尽管m1已经在父类中实现了, 但仍然需要再次实现
public void m2() { } //因为再次implements了接口
}
will52000 2005-03-04
  • 打赏
  • 举报
回复
第二种方法,强迫你重写AbstractClassA中的方法
Times2001 2005-03-04
  • 打赏
  • 举报
回复
欢迎大家讨论啊
BasaraTracy(不屈斗志) :
如果每个都要复写,AbstractClassA实现的方法,不就浪费了
BasaraTracy 2005-03-04
  • 打赏
  • 举报
回复
如果不写implements InterfaceA在类中就可以不写InterfaceA要求的方法了,但如果执行接口则必须写。个人认为是一种强制复写方法的机制,在特定的时候会有用。
Dan1980 2005-03-04
  • 打赏
  • 举报
回复
同意楼上, 多此一举
fightboy 2005-03-04
  • 打赏
  • 举报
回复
个人认为就是多此一举
Times2001 2005-03-04
  • 打赏
  • 举报
回复
例如
public class LinkedList extends AbstractSequentialList implements List, Cloneable, Serializable

其中AbstractSequentialList是实现了List的

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧