Java Eclipse——为什么接口方法被认为是开放超级实现
遵循一个接口和一个实现类:Java Eclipse——为什么接口方法被认为是开放超级实现,java,eclipse,interface,Java,Eclipse,Interface,遵循一个接口和一个实现类: public interface MyI void test(); } public MyImpl implements MyI { //@Override with or without @Override public void test() { } } 按下Ctrl键并单击Eclipse中的implementationtest()method时,将显示一个菜单,提供Open Super implementation
public interface MyI
void test();
}
public MyImpl implements MyI {
//@Override with or without @Override
public void test() {
}
}
按下Ctrl键并单击Eclipse中的implementationtest()
method时,将显示一个菜单,提供Open Super implementation
选择打开超级实现
时,将转到接口的方法,该方法没有实现
使用接口方法是有意的还是仅仅是一个额外的特性,尽管命名很混乱/似乎是错误的?这是一个IDE特性。如菜单项所示,它将带您进入超级方法。在运行时,将调用实现方法。因此,这只是IDE的一个特性。在执行过程中(错误的i.o.)似乎可以提供一些信息。因为存在(可以存在)一个几乎是常规的/预期的
@覆盖:第一个声明
对于抽象方法,在一个可能相同的抽象超类中
因此,“实现”有点误导,但还有覆盖。
应该注意的是,接口方法的第一个实现最初不能有@覆盖
。一个能够防止错误的java更改(确实可以看到抽象方法是用正确的签名实现的)。我想问的是,为什么IDE特性调用了implementation
,而不是super
哪个eclipse版本?你可以发布一个菜单项的截图吗?它是否在上下文菜单中(您只是说“单击实现”,而不是右键单击或其他什么)?这至少与Java语言规范给出的@Override
一致。@howlger它有无@Override
(更新)@FlorianAlbrecht Eclipse 2018-09,当您在方法上单击Ctrl+鼠标时。补充image@user7294900当然可以,但是@Override
不是错误,这意味着该方法根据。Eclipse使用与Java语言规范一致的含义,即使这看起来不那么直观(因为这里的@Override
不是一个错误是不直观的:这里没有覆盖超级实现;只是一个接口方法的实现)。是的,@Override
对于接口是可选的,但我想表达的是,可以从UI访问中删除操作go-to实现,或者让它跟随go-to声明源。