首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >方法签名中的Final关键字

方法签名中的Final关键字
EN

Stack Overflow用户
提问于 2011-09-27 14:57:36
回答 6查看 11.7K关注 0票数 9

可能重复: 接口方法中的最后参数--有什么意义?

在尝试做一些实验时,我遇到了一个在此页中描述的问题。

代码语言:javascript
复制
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++
    }
}

为什么这样的功能是可能的?我不知道为什么可以通过重写方法将最终的参数变成非最终的参数。为什么在方法签名中忽略最后一个关键字?以及如何要求子类在其方法中使用最终变量?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-09-27 15:01:43

按值将参数传递给方法。

因此,参数的任何更改都不能传播回调用方。因此,无论参数是否声明,final对调用方都没有任何影响。因此,它是方法实现的一部分,而不是其接口的一部分。

你想要“强制子类在其方法中使用最终变量”的动机是什么?

票数 9
EN

Stack Overflow用户

发布于 2011-09-27 15:04:14

参数的final仅意味着不能在方法体内更改该值。这不是方法签名的一部分,与子类无关。

在接口或抽象方法中有最终的参数应该是无效的,因为它没有意义。

票数 7
EN

Stack Overflow用户

发布于 2011-09-27 15:10:07

Java的final不是C++ const;在Java中没有const-正确性这样的东西。

在Java中,可以使用不可变的类来实现一致性。结果证明它是非常有效的,因为与C++不同,不能简单地处理内存。(您可以使用Field.setAccessible(true),然后使用反射。但是即使是这种损坏向量也可以通过使用配置适当的安全管理器运行JVM来防止。)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7571250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档