Допустим, у меня есть производный тип bar_a
, который включен в производный тип foo_a
как переменная bar
.
Теперь я хочу расширить bar_a
и создать новый производный тип с именем bar_b
. Я пробовал следующее:
program main
implicit none
! Base types -----------
type :: bar_a
integer :: a
end type bar_a
type :: foo_a
type(bar_a) :: bar
end type foo_a
! Extended types -------
type, extends(bar_a) :: bar_b
integer :: b
end type bar_b
type, extends(foo_a) :: foo_b
type(bar_b) :: bar ! <-- Component ‘bar’ at (1) already in the parent type
end type foo_b
! ----------------------
type(foo_b) :: foo
print *, foo%bar%a
print *, foo%bar%b
end program main
но я получаю ошибку компилятора: компонент «бар» в (1) уже в родительском типе.
Есть ли способ расширить foo_a
, чтобы он включал новый производный тип bar_b
, как я пытался, или есть ли способ переопределить объявление переменной bar
? Я хотел бы унаследовать связанные с типом процедуры, которые будут частью foo_a
в foo_b
.