Я пытаюсь создать родительский класс с двумя дочерними подклассами.Родительский класс будет содержать хотя бы один отложенный метод и хотя бы один неотложенный метод.
Родительский класс
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
Как вызвать метод суперкласса, когда этосуперкласс содержит отложенные методы?