我在Java中有以下界面
public interface IFoo
{
public abstract void foo();
public void bar();
}
foo() 和 bar() 有什么区别?什么时候应该使用摘要?
除非我遗漏了一些微妙的东西,否则两者似乎都能完成我想要的事情?
更新为什么要将 Java 接口方法声明为抽象的重复项?
我在Java中有以下界面
public interface IFoo
{
public abstract void foo();
public void bar();
}
foo() 和 bar() 有什么区别?什么时候应该使用摘要?
除非我遗漏了一些微妙的东西,否则两者似乎都能完成我想要的事情?
更新为什么要将 Java 接口方法声明为抽象的重复项?
没有任何功能差异。java 接口中没有提供任何实现,因此所有方法声明都是隐式抽象的。
参见[1]:http: //java.sun.com/docs/books/tutorial/java/IandI/abstract.html
以上直接报价:
注意:接口中的所有方法(请参阅接口部分)都是隐式抽象的,因此 abstract 修饰符不与接口方法一起使用(可能是——只是没有必要)。
接口方法都是默认的public
。abstract
and之间没有区别foo()
,bar()
您可以安全地删除所有public
andabstract
关键字。
你没有错过任何东西。来自Java 语言规范:
接口主体中的每个方法声明都是隐式抽象的,因此它的主体始终由分号表示,而不是块。
接口主体中的每个方法声明都是隐式公共的。
换句话说,您可以省略接口方法public
以及on 方法。abstract
它是多余的(两个声明之间没有区别)并且在 Java 语言规范的第 9.4 节中明确不鼓励:
为了与旧版本的 Java 平台兼容,允许但不鼓励,作为一种风格,为接口中声明的方法冗余地指定抽象修饰符。
并且public
同样是不必要和不鼓励的:
允许,但强烈建议不要为接口方法冗余地指定 public 修饰符。
我不知道为什么public
强烈气馁,但abstract
只是气馁......
两者的作用相同,因为接口中的所有方法都是抽象的。
abstract
在这种情况下是不必要的(就像将接口中的方法标记为一样public
)。
相反,您将在抽象类中的方法上使用它,以强制其被子类覆盖。
声明之间没有区别。从概念上讲,接口中的所有方法都是抽象的。
没有什么不同的。java接口中的所有方法总是抽象的。
请参阅此链接的第一个注释:http: //java.sun.com/docs/books/tutorial/java/IandI/abstract.html
foo() 和 bar() 都是抽象的,因为它们是在接口中声明的。您在这里使用的抽象词没有意义-您最好将其删除。
java中的接口“不知何故”等同于完全抽象的类,因此在接口中的方法声明中添加“abstract”关键字与方法无关!