Reputation: 26428
I know that in Java we can't extend a final class. But is there any alternative way where I get the effect of extending a final class?
Because I have a final class with the requirements I am looking for, so if somehow I can reuse this, it would be of great help for me.
Upvotes: 13
Views: 10588
Reputation: 14779
Create a wrapper for the final class?
Something like this:
class MyClass {
private FinalClass finalClass;
public MyClass {
finalClass = new FinalClass():
}
public void delegatingMethod() {
finalClass.delegatingMethod();
}
}
A wrapper class like MyClass
won't be accepted as an instance of FinalClass
. If FinalClass
implements any interfaces you can implement them in MyClass
to make the classes more alike. The same is true of any non-final parents of the FinalClass
; in that case your MyClass
design should be compatible with those parent classes though.
It is even possible to create a wrapper class during runtime using reflection. In that case you can use the Proxy
class. Beware that proxy classes do require in depth knowledge about the Java type system.
Upvotes: 28
Reputation: 7098
The simplest option would be to write a wrapper, which contains an instance of the final class as a member variable and acts as a proxy to the final class.
This way, it's easy to override or extend methods of the final class.
Upvotes: 3