我试图建立一个带有两个子子类的父类。父类将包含至少一种延迟方法和至少一种非延迟方法。
父类
TYPE, ABSTRACT :: parent
CONTAINS
PROCEDURE (parent_deferred_method), DEFERRED :: deferred_method
PROCEDURE :: non_deferred_method => parent_non_deferred_method
END TYPE
ABSTRACT INTERFACE
FUNCTION parent_deferred_method(this)
IMPORT
CLASS (parent), INTENT(in) :: this
INTEGER :: parent_deferred_method
END FUNCTION
END INTERFACE
CONTAINS
FUNCTION parent_non_deferred_method(this)
CLASS (parent), INTENT(in) :: this
INTEGER :: parent_non_deferred_method
parent_non_deferred_method = 1
END FUNCTION
因为我有一个延迟的方法,所以我需要将父类型设为抽象。现在,我要定义两个子类。一个孩子将不会覆盖父类的非延迟方法。
儿童1班
TYPE, EXTENDS(parent) :: child1
CONTAINS
PROCEDURE :: deferred_method => child1_deferred_method
END TYPE
CONTAINS
FUNCTION child1_deferred_method(this)
CLASS (child1), INTENT(in) :: this
INTEGER :: child1_deferred_method
child1_deferred_method = 2
END FUNCTION
但是另一个将覆盖。我遇到的问题是我想第二个子类调用父类的方法。但是,由于父类为ABSTRACT
,这给了我一个错误。
儿童2班
TYPE, EXTENDS(parent) :: child2
CONTAINS
PROCEDURE :: deferred_method => child2_deferred_method
PROCEDURE :: non_deferred_method => child2_non_deferred_method
END TYPE
CONTAINS
FUNCTION child2_deferred_method(this)
CLASS (child2), INTENT(in) :: this
INTEGER :: child2_deferred_method
child2_deferred_method = 3
END FUNCTION
FUNCTION child2_non_deferred_method(this)
CLASS (child2), INTENT(in) :: this
INTEGER :: child2_non_deferred_method
child2_non_deferred_method = 4 + &
& this%parent%non_deferred_method()
END FUNCTION
当超类包含延迟的方法时,如何调用该超类方法?