Polimorfismo en fortran

Tengo un código similar a:

Module C_sys

  use class_A

   implicit none

    Private

    Type, public :: C_sys_type

  private

   logical   :: Ao_set = .false. 

   type(A) :: Ao

 Contains

 Private

    Procedure, public :: get_Ao
    Procedure, public :: set_Ao

 End Type C_sys_type

  interface C_sys_type

   Procedure C_sys_type_constructor

  end interface C_sys_type

 Contains

type(C_sys_type) elemental function C_sys_type_constructor(Ao) result(C_sys)

   type(A), intent(in), optional :: Ao

    C_sys % Ao = Ao
   C_sys % Ao_set = .true.

end function C_sys_type_constructor

type(A) elemental function get_Ao 
  class(C_sys_type), intent(in) :: this

   get_Ao = this % Ao
 end function get_Ao

 subroutine set_Ao(this, Ao)

 class(C_sys_type), intent(inout) :: this
 type(Ao), intent(in)             :: Ao

   this % Ao     = Ao  
   this % Ao_set = .true.

end subroutine set_Ao

End Module C_sys

No estoy seguro de dónde en la subrutina set_Ao, escriba (Ao), intent (in) :: Ao debería dejarse así o en su lugar tener class (Ao), intent (in) :: Ao. Sé que la clase (Ao) está haciendo que la variable sea polimórfica y está accediendo al tipo de datos de A. Pero no sé cuándo debe usarse una u otra.

Gracias

Respuestas a la pregunta(1)

Su respuesta a la pregunta