在 Java 中,在接口方法中定义参数是完全合法的,final并且在实现类中不遵守,例如:
final
public interface Foo { public void foo(int bar, final int baz); } public class FooImpl implements Foo { @Override public void foo(final int bar, int baz) { ... } }
在上面的例子中bar,在类 VS 接口中baz有相反的定义。final
bar
baz
以同样的方式,final当一个类方法扩展另一个类方法时,无论是否扩展,都abstract不会强制执行任何限制。
abstract
虽然final在类方法体内有一定的实用价值,但final接口方法参数有什么规定吗?
这似乎没有任何意义。根据Java 语言规范 4.12.4:
声明一个变量 final 可以作为有用的文档,说明它的值不会改变,并且可以帮助避免编程错误。
但是,方法参数的修饰符在匹配重写方法的签名final的规则中没有提及,并且它对调用者没有影响,仅在实现的主体内。此外,正如 Robin 在评论中所指出的,方法参数上的修饰符对生成的字节码没有影响。(这不适用于 . 的其他用途。)final``final
final``final