How to refer to "this" in abstract Java class?
Question by user1111929
Is it possible in Java to use this inside a method of an abstract class, but as an instance of the subclass at hand, not just of the abstract class?
abstract class MyAbstractClass <MyImplementingClass extends MyAbstractClass> {
public abstract MyImplementingClass self();
}
which I overwrite in every subclass I with
class MyImplementingClass extends MyAbstractClass<MyImplementingClass> {
@Override public MyImplementingClass self() {
return this;
}
}
but I wonder if there are more elegant methods to do this. In particular, one that doesn’t require every subclass to overwrite a routine like self().
Answer by amit
The issue here I believe is that your self() method returns MyImplementingClass and not MyAbstractClass.
You should return a MyAbstractClass, the dynamic type of the returned object will be the relevant one.
I also do not follow why wouldn’t you just use this? It returns the object itself, with the correct dynamic type, regardless of where it is called. You can cast it if you need to
Answer by Starx
I believe, you can return newInstance() of a class to behave like that
@Override public MyImplementingClass self() {
return MyImplementingClass.newInstance();
}