Answer from Paul on IRC: "use IMPORT :: I", i.e. abstract interface subroutine do_it_interface(self) import :: I class(I) :: self end subroutine do_it_interface end interface Thanks, Dominique