组件的分配是一个可执行操作 - 它需要出现在源代码的可执行部分中。考虑这样的事情:
type, abstract :: vehicle
real, dimension(:), allocatable :: wheels
...
end type
type, extends(vehicle) :: bike
...
end type bike
type, extends(vehicle) :: car
...
end type car
interface bike
procedure bike_constructor
end interface bike
interface car
procedure car_constructor
end interface car
...
function bike_constructor()
type(bike) :: bike_constructor
allocate(bike_constructor%wheels(2))
...
end function bike_constructor
function car_constructor()
type(car) :: car_constructor
allocate(car_constructor%wheels(4))
...
end function car_constructor
在 Fortran 2008 中,可以通过以下简单的方式使用它:
class(vehicle), allocatable :: obj
IF (i_feel_like_some_exercise) THEN
obj = bike()
ELSE
obj = car()
END IF
PRINT "('My object has ',I0,' wheels!')", SIZE(obj%wheels)
在 Fortran 2003 中,不支持对多态对象的内部赋值。需要使用解决方法,例如在 ALLOCATE 语句中使用 SOURCE 说明符。
对组件和过程适当应用公共和私有可以进一步指导和约束客户端代码以正确的方式与类型进行交互。