说,我有以下代码:
interface IAAA {
void aaa();
}
interface IBBB extends IAAA {
void bbb();
}
class MyClass implements IAAA, IBBB {
public void bbb() { }
public void aaa() { }
}
在IAAA
中实现MyClass
有什么好处?
如您所见,IAAA
已经扩展了IBBB
,并且MyClass
正在实现IAAA
和IBBB
。从IAAA
中删除MyClass
似乎没有任何影响。
我问这个愚蠢的问题的原因是,
我经常在 Android
开源项目中看到这种模式,有时甚至在诸如Java
之类的标准API
ArrayList
中也看到这种模式。>
我要谈论的一个例子是 SpannableStringBuilder
。
Spanned
界面扩展了CharSequence
界面。
Spannable
界面扩展了Spanned
界面。
Editable
接口扩展了CharSequence
和Spannable
接口。
SpannableStringBuilder
类再次实现CharSequence
,Spannable
,Editable
接口。
我真的不明白。这样做的目的是什么?为什么要打扰?
答案 0 :(得分:5)
没有技术原因。这可能会使维护变得容易一些-如果Bar扩展了Foo,并且您想查找实现Foo的所有类,则只需要查找Foo即可,而不必查找Foo和Bar。
答案 1 :(得分:2)
文档,加强了$("#numbers tbody").prepend("<tr><td></td><td>" + number + "</td><td>" + formattedTime + "</td></tr>");
必须实现MyClass
的事实,而没有强迫(人类)代码阅读者看着IAAA
知道这一点。