考虑一个例子(用java编译)
public abstract interface Interface {
public void interfacing();
public abstract boolean interfacing(boolean really);
}
为什么接口必须被“声明”为抽象?是否有其他规则适用于抽象接口?
最后:如果抽象已经过时,为什么Java中还包含它?抽象界面有历史吗?
考虑一个例子(用java编译)
public abstract interface Interface {
public void interfacing();
public abstract boolean interfacing(boolean really);
}
为什么接口必须被“声明”为抽象?是否有其他规则适用于抽象接口?
最后:如果抽象已经过时,为什么Java中还包含它?抽象界面有历史吗?
当前回答
为什么接口必须被“声明”为抽象?
它不是。
public abstract interface Interface {
\___.__/
|
'----> Neither this...
public void interfacing();
public abstract boolean interfacing(boolean really);
\___.__/
|
'----> nor this, are necessary.
}
接口及其方法是隐式抽象的,添加这个修饰符没有任何区别。
是否有其他规则适用于抽象接口?
不,同样的规则适用。该方法必须由任何(具体的)实现类实现。
如果抽象已经过时,为什么Java中还包含它?抽象界面有历史吗?
有趣的问题。我翻出了第一版的JLS,即使在那里它也说“这个修饰符已经过时了,不应该在新的Java程序中使用”。
好吧,再深入挖掘一下……在点击了许多失效的链接之后,我设法找到了一份原始的Oak 0.2规范(或“手册”)。我必须说,这本书很有趣,总共只有38页!: -)
在第5节“接口”中,提供了以下示例:
public interface Storing {
void freezeDry(Stream s) = 0;
void reconstitute(Stream s) = 0;
}
在空白处写着
将来,在接口中声明方法的“=0”部分可能会消失。
假设=0被abstract关键字替换,我怀疑abstract在某些时候对于接口方法是强制性的!
相关文章:Java:抽象接口和抽象接口方法
其他回答
不需要声明接口抽象。
就像声明所有这些方法是公共的(如果接口是公共的,它们已经是公共的)或抽象的(它们已经在接口中是公共的)是多余的。
不过,没人会阻止你。
其他你可以明确声明的事情,但不需要:
在构造函数的第一行调用super() 扩展对象 实现继承接口
是否有其他规则适用于抽象接口?
接口已经是“抽象的”了。再次应用这个关键字完全没有区别。
为什么接口必须被“声明”为抽象?
它不是。
public abstract interface Interface {
\___.__/
|
'----> Neither this...
public void interfacing();
public abstract boolean interfacing(boolean really);
\___.__/
|
'----> nor this, are necessary.
}
接口及其方法是隐式抽象的,添加这个修饰符没有任何区别。
是否有其他规则适用于抽象接口?
不,同样的规则适用。该方法必须由任何(具体的)实现类实现。
如果抽象已经过时,为什么Java中还包含它?抽象界面有历史吗?
有趣的问题。我翻出了第一版的JLS,即使在那里它也说“这个修饰符已经过时了,不应该在新的Java程序中使用”。
好吧,再深入挖掘一下……在点击了许多失效的链接之后,我设法找到了一份原始的Oak 0.2规范(或“手册”)。我必须说,这本书很有趣,总共只有38页!: -)
在第5节“接口”中,提供了以下示例:
public interface Storing {
void freezeDry(Stream s) = 0;
void reconstitute(Stream s) = 0;
}
在空白处写着
将来,在接口中声明方法的“=0”部分可能会消失。
假设=0被abstract关键字替换,我怀疑abstract在某些时候对于接口方法是强制性的!
相关文章:Java:抽象接口和抽象接口方法
这是不必要的,因为接口默认是抽象的,因为接口中的所有方法都是抽象的。
这是不必要的。这是语言的怪癖。
注意,在春季,它没有学术意义。 抽象接口是对开发人员的警告,不要将其用于@Autowired。 我希望spring/eclipse @Autowired能够查看这个属性,并警告/fail使用该属性。
一个真实的例子:@Transnational到@Repository下的@Service代理需要使用相同的基本方法,但是由于@Autowired,它们应该使用不同的接口来扩展这个抽象接口。 (我称之为XXXSpec接口)