关于extends和implements

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

ClassA extends AbstractClassA implements InterfaceA


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

...全文
642 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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,634

社区成员

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

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