<Example Program>

Module types
  Type t1
    Real a
  End Type
  Type, Extends(t1) :: et1
    Real b
  End Type
  Type t2
    Logical a
  End Type
End Module
Program example
  Use types
  Class(*),Pointer :: a, b, c
  Allocate(t1::a)
  Allocate(t2::b)
  Allocate(et1::c)
  Print *,'a vs. b:', Extends_Type_Of(a, b), Extends_Type_Of(b, a)
  Print *,'a vs. c:', Extends_Type_Of(a, c), Extends_Type_Of(c, a)
End Program

Note: Execution Results
 a vs. b: F F
 a vs. c: F T