To achieve what you want: by associating an argument type with a declared class, you can use generics.
abstract class:
public abstract class A <T extends A<T>> {
public abstract T method1(T arg);
}
specific class:
public class B extends A<B> {
@Override
public B method1(B arg) {
...
return ...
}
}
source
share