sto*_*r96 9 java extends overriding interface
我有一个接口A和B.A有一个叫做foo的(抽象)方法.B延伸A.
即使使用@Override,也可以在接口B中覆盖foo,但是在任何情况下都有意义吗?没有什么可以覆盖,因为这两种方法都必须是抽象的,没有正文.所以我猜没有合理的情况,对吧?
那么为什么可以在界面中覆盖呢?
man*_*uti 11
一种情况是,当你要更新的Javadoc文档,以反映在子接口方法的更具体的合同,就是这种情况与Collection#addAll(Collection)和List#addAll(Collection):
Collection#addAll(Collection):
将指定集合中的所有元素添加到此集合中(可选操作)...
List#addAll(Collection:
将指定集合中的所有元素追加到此列表的末尾,按指定集合的迭代器(可选操作)返回它们的顺序...
子接口还可以添加从Java 8开始的默认实现.
子类型可以强加更多条件,更改返回类型,更改投掷类型.一个例子
interface AutoCloseable
void close() throws Exception
interface Closeable extends AutoCloseable
void close() throws IOException
Run Code Online (Sandbox Code Playgroud)
(子类型也可以覆盖方法签名的删除版本......但那是旧故事)
在java8中,子接口可以为抽象方法提供默认的impl
interface DummyCloseable extends Closeable
{
default void close()
{
// do nothing
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
142 次 |
| 最近记录: |