輸入副檔名
如果派生型別既沒有 bind
屬性也沒有 sequence
屬性,則它是可擴充套件的。這種型別可以通過其他型別擴充套件。
module mod
type base_type
integer i
end type base_type
type, extends(base_type) :: higher_type
integer j
end type higher_type
end module mod
宣告型別為 base_type
的多型變數與 higher_type
型別相容,可以將其作為動態型別
class(base_type), allocatable::obj
allocate(obj, source=higher_type(1,2))
型別相容性通過一系列子項下降,但型別可能只擴充套件另一種型別。
擴充套件派生型別從父級繼承型別繫結過程,但可以覆蓋它
module mod
type base_type
contains
procedure::sub => sub_base
end type base_type
type, extends(base_type) :: higher_type
contains
procedure::sub => sub_higher
end type higher_type
contains
subroutine sub_base(this)
class(base_type) this
end subroutine sub_base
subroutine sub_higher(this)
class(higher_type) this
end subroutine sub_higher
end module mod
program prog
use mod
class(base_type), allocatable::obj
obj = base_type()
call obj%sub
obj = higher_type()
call obj%sub
end program