【发布时间】:2014-05-17 07:38:37
【问题描述】:
class T {}
interface Interface{
void method(final T t);
}
class FirstClass implements Interface{
public void method(T t){
//valid
}
public void method2(final T t){
}
}
class SecondClass extends FirstClass {
public void method2(T t){
//valid
}
}
在上面的代码中,为什么在重写方法时没有考虑 final 限定符?
我对方法签名中最终限定符的理解是,方法不允许更改引用。但是我不明白它有什么用?
假设我正在使用 3rd 方 jar,我担心 3rd 方 jar 在处理时不应更改我的对象,代码应该是这样的,
3rdPartyClass.doProcess((final) myObject);
class 3rPartyClss {
public void doProcess(SomeClass myObject){}
}
但为什么会这样
3rdPartyClass.doProcess(myObject);
class 3rPartyClss {
public void doProcess(final SomeClass myObject){}
}
如果第 3 方知道他不会更改方法内的对象引用,那么在签名中包含 final 有什么用?在覆盖方法中,它也不会考虑最终限定符。那么它的真正用途是什么呢?
我发现了类似here 的问题,但希望对此进行更多说明
【问题讨论】:
标签: java oop overriding final