Замена результата выполнения метода в производных классах
Здравствуйте уважаемые пользователи. Есть метод в базовом классе, который я хотел бы использовать во всех наследниках.
Базовый класс:
TRootClass = class
public
function ToJsonString: string;
class function FromJsonString(const AJsonString: string): TRootClass;
end;
Наследник:
TBuilding = class(TRootClass)
private
FId: integer;
FName: string;
FAdress: string;
FAdmin: string;
public
class function FromJsonString(const AJsonString: string): TBuilding;
property id: integer read GetId write FId;
property Name: string read GetName write FName;
property Adress: string read GetAdress write FAdress;
property Admin: string read GetAdmin write FAdmin;
Собственно метод FromJsonString и хочется использовать во всех дочерних классах, но возник у меня такой вопрос: В данном случае получается что я просто перекрываю метод с таким же названием, однако что будет в случае если я сделаю в базовом классе так:
class function FromJsonString(const AJsonString: string): TRootClass; dynamic; abstract;
Вообще есть ли в этом смысл? Может ли метод из базового класса изменять свое поведение (например возвращать другой тип данных) в производных классах и при этом же быть абстрактным?
p.s Прошу тапками не кидать, сложно дается ООП и все что с ним связанно