Java method keyword "final" and its use
Posted
by
Lukas Eder
on Stack Overflow
See other posts from Stack Overflow
or by Lukas Eder
Published on 2011-01-15T14:12:02Z
Indexed on
2011/01/15
14:53 UTC
Read the original article
Hit count: 336
When I create complex type hierarchies (several levels, several types per level), I like to use the final
keyword on methods implementing some interface declaration. An example:
interface Garble {
int zork();
}
interface Gnarf extends Garble {
/**
* This is the same as calling {@link #zblah(0)}
*/
int zblah();
int zblah(int defaultZblah);
}
And then
abstract class AbstractGarble implements Garble {
@Override
public final int zork() { ... }
}
abstract class AbstractGnarf extends AbstractGarble implements Gnarf {
// Here I absolutely want to fix the default behaviour of zblah
// No Gnarf shouldn't be allowed to set 1 as the default, for instance
@Override
public final int zblah() {
return zblah(0);
}
// This method is not implemented here, but in a subclass
@Override
public abstract int zblah(int defaultZblah);
}
I do this for several reasons:
- It helps me develop the type hierarchy. When I add a class to the hierarchy, it is very clear, what methods I have to implement, and what methods I may not override (in case I forgot the details about the hierarchy)
- I think overriding concrete stuff is bad according to design principles and patterns, such as the
template method
pattern. I don't want other developers or my users do it.
So the final
keyword works perfectly for me. My question is:
Why is it used so rarely in the wild? Can you show me some examples / reasons where final
(in a similar case to mine) would be very bad?
© Stack Overflow or respective owner