Delphi: Quando reintroduzir os antepassados ocultos e quando os mostrar?

Hoje Recentemente, no Stackoverflow, aprendi que:

reintroduzir é usado paraocultar construtores ancestraisreintroduzir é usado paramostrar construtores ancestrais

Eu tenho tentado entender tudo, então aqui está outra questão muito específica,apoiando minha pergunta principal que lida com construtores.

Atualizar: substituiu toda a pergunta:

TComputer = class(TObject)
public
   constructor Create(Teapot: string='');
end;

TCellPhone = class(TComputer)
public
   constructor Create(Cup: Integer); overload; virtual;
   constructor Create(Cup: Integer; Teapot: string); overload; virtual;
end;

Ao construir o TCellPhone, três construtores estão disponíveis:

Taça: InteiroTaça: Inteiro; Bule: string[Bule: String = '']

Pergunta: Por que éconstructor(Teapot: string='') não está escondido?

Agora eu adicionei um terceiro descendente:

TComputer = class(TObject)
public
   constructor Create(Teapot: string='');
end;

TCellPhone = class(TComputer)
public
   constructor Create(Cup: Integer); overload; virtual;
   constructor Create(Cup: Integer; Teapot: string); overload; virtual;
end;

TiPhone = class(TCellPhone)
public
   constructor Create(Cup: Integer); override;
end;

Ao construirTiPhone quatro construtores estão disponíveis:

Taça: InteiroTaça: InteiroTaça: Inteiro; Bule: string[Bule: string = '']

Por que existemquatro construtores? Substituí um dos três existentes.Editar: Isso pode ser um bug no insight do código, ele me mostra quatro - mas como eu poderia ligar quando dois são iguais?

Usando o código original novamente:

TComputer = class(TObject)
public
   constructor Create(Teapot: string='');
end;

TCellPhone = class(TComputer)
public
   constructor Create(Cup: Integer); overload; virtual;
   constructor Create(Cup: Integer; Teapot: string); overload; virtual;
end;

já se sabe queTCellPhone possui três construtores:

Taça: InteiroTaça: Inteiro; Bule: string[Bule: String = '']

Como altero a declaração deTCellPhone esconder o construtor ancestral? por exemplo. de modo a:

TNokia = class(TCellPhone)
end;

terá apenas dois construtores:

Taça: InteiroTaça: Inteiro; Bule: string

Agora, o caso em quereintroduce é usado para ocultar um ancestral não virtual. No caso anteriorTiPhone possui quatro construtores (idealmente haveria apenas dois - comTComputer de alguma forma escondendo seu ancestral). Mas mesmo que eu não consiga consertarTComputer, eu posso mudarTiPhone ter apenas um:

TComputer = class(TObject)
public
    constructor Create(Teapot: string='');
end;

TCellPhone = class(TComputer)
public
    constructor Create(Cup: Integer); overload; virtual;
    constructor Create(Cup: Integer; Teapot: string); overload; virtual;
end;

TiPhone = class(TCellPhone)
public
    constructor Create(Cup: Integer); reintroduce;
end;

AgoraTiPhone possui apenas um construtor:

Taça: Inteiro

Reintroduzir normalmente é usado apenas para suprimir o aviso sobre ocultarvirtual antepassados. Nesse caso:

Create(Teapot: string = '')

não é virtual - ainda posso usar a reintrodução para ocultá-lo.

Masagora, se eu adicionar outro sobrecarregado aoTiPhone:

TiPhone = class(TCellPhone)
public
   constructor Create(Cup: Integer); reintroduce; overload;
   constructor Create(Handle: String); overload;
end;

De repente, os ancestrais (anteriormente ocultos) voltam:

TiPhone.Create (7);TiPhone.Create ('rosa');TiPhone.Create (7, 'rosa');TiPhone.Create ();

Como você pode ver, estou lutando para entender a lógica de

quando algo está escondidocomo esconder algoquando algo é mostradocomo mostrar algo

questionAnswers(4)

yourAnswerToTheQuestion