可能重复: 接口方法中的最后参数--有什么意义?
在尝试做一些实验时,我遇到了一个在此页中描述的问题。
interface B {
public int something(final int a);
}
abstract class C {
public int other(final int b);
}
class A extends C implements B {
public int something(int a) {
return a++;
}
public int other(int b) {
return b++
}
}为什么这样的功能是可能的?我不知道为什么可以通过重写方法将最终的参数变成非最终的参数。为什么在方法签名中忽略最后一个关键字?以及如何要求子类在其方法中使用最终变量?
发布于 2011-09-27 15:01:43
按值将参数传递给方法。
因此,参数的任何更改都不能传播回调用方。因此,无论参数是否声明,final对调用方都没有任何影响。因此,它是方法实现的一部分,而不是其接口的一部分。
你想要“强制子类在其方法中使用最终变量”的动机是什么?
发布于 2011-09-27 15:04:14
参数的final仅意味着不能在方法体内更改该值。这不是方法签名的一部分,与子类无关。
在接口或抽象方法中有最终的参数应该是无效的,因为它没有意义。
发布于 2011-09-27 15:10:07
Java的final不是C++ const;在Java中没有const-正确性这样的东西。
在Java中,可以使用不可变的类来实现一致性。结果证明它是非常有效的,因为与C++不同,不能简单地处理内存。(您可以使用Field.setAccessible(true),然后使用反射。但是即使是这种损坏向量也可以通过使用配置适当的安全管理器运行JVM来防止。)
https://stackoverflow.com/questions/7571250
复制相似问题