Delphi: ¿Cuándo reintroduce los ancestros escondidos y cuándo los muestra?

Hoy Recientemente en Stackoverflow aprendí que:

reintroducir se utiliza paraesconder constructores ancestralesreintroducir se utiliza paraespectáculo constructores ancestrales

He estado tratando de darle sentido a todo, así que aquí hay otra pregunta muy específica,apoyando mi pregunta principal sobre constructores.

Actualizar: reemplazó toda la pregunta:

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;

Al construir TCellPhone, hay 3 constructores disponibles:

Copa: EnteroCopa: Entero; Tetera: cadena[Tetera: Cadena = '']

Pregunta: ¿Por qué esconstructor(Teapot: string='') no estar oculto?

Ahora agregué un tercer descendiente:

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;

Al construirTiPhone cuatro los constructores están disponibles:

Copa: EnteroCopa: EnteroCopa: Entero; Tetera: cadena[Tetera: cadena = '']

Por qué haycuatro constructores? anulé uno de los tres existentes.Editar: Esto puede ser un error en el conocimiento del código, me muestra cuatro; sin embargo, ¿cómo podría llamar cuando dos son iguales?

Usando el código original nuevamente:

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;

ya se sabe queTCellPhone tiene tres constructores:

Copa: EnteroCopa: Entero; Tetera: cadena[Tetera: Cadena = '']

¿Cómo modifico la declaración deTCellPhone para ocultar el constructor ancestro? p.ej. así que eso:

TNokia = class(TCellPhone)
end;

solo tendrá dos constructores:

Copa: EnteroCopa: Entero; Tetera: cadena

Ahora para el caso dondereintroduce se usa para ocultar un ancestro no virtual. En el caso anteriorTiPhone tiene cuatro constructores (idealmente solo habría dos, conTComputer de alguna manera ocultando a su antepasado). Pero incluso si no puedo arreglarTComputer, puedo cambiarTiPhone tener solo uno:

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;

AhoraTiPhone tiene un solo constructor:

Copa: Entero

Reintroducir normalmente solo se usa para suprimir la advertencia sobre la ocultaciónvirtual antepasados En este caso:

Create(Teapot: string = '')

no es virtual, pero todavía puedo usar reintroducir para ocultarlo.

Peroahora, si agrego otro sobrecargado aTiPhone:

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

Entonces, de repente, los ancestros (previamente ocultos) regresan:

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

Como puede ver, estoy luchando por comprender la lógica de

cuando algo esta ocultocomo esconder algocuando se muestra algocomo mostrar algo

Respuestas a la pregunta(4)

Su respuesta a la pregunta