abstract class FooImpl<Self extends FooImpl<Self>> { Self doIt() { .... } }
As a class with a self type, analogous to an open recursive function, and then:
class FooFinal extends FooImpl<FooFinal> {...}
As it’s call.
abstract class FooImpl<Self extends FooImpl<Self>> { Self doIt() { .... } }
As a class with a self type, analogous to an open recursive function, and then:
class FooFinal extends FooImpl<FooFinal> {...}
As it’s call.