Polimorfismo em fortran

Tenho um código semelhante 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

Não sei ao certo onde na sub-rotina set_Ao, digite (Ao), intent (in) :: Ao deve ser deixado assim ou em vez disso para ter a classe (Ao), intent (in) :: Ao. Eu sei que a classe (Ao) está tornando a variável polimórfica e acessando o tipo de dados de A. Mas não sei quando ela deve ser usada uma ou outr

Obrigado

questionAnswers(1)

yourAnswerToTheQuestion