Delphi: Когда вновь появляются шкуры предков и когда они показывают их?

сегодня Недавно на Stackoverflow я узнал, что:

реинтродукция используется дляскрывать конструкторы предковреинтродукция используется дляшоу конструкторы предков

Я пытался разобраться во всем этом, так что вот еще один, очень специфический вопрос,поддерживая мой главный вопрос, касающийся конструкторов.

Обновить: заменил весь вопрос:

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;

При создании TCellPhone доступны 3 конструктора:

Кубок: целое числоКубок: целое число; Чайник: строка[Чайник: Строка = '']

Вопрос: почемуconstructor(Teapot: string='') не быть скрытым?

Теперь я добавил третьего потомка:

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;

При строительствеTiPhone четыре Конструкторы доступны:

Кубок: целое числоКубок: целое числоКубок: целое число; Чайник: строка[Чайник: строка = '']

Почему тамчетыре Конструкторы? я переиграл одну из существующих трех.Редактировать: Это может быть ошибкой в ​​проницательности кода, она показывает мне четыре - но как я могу тогда звонить, когда два одинаковы.

Используя оригинальный код снова:

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;

уже известно, чтоTCellPhone имеет три конструктора:

Кубок: целое числоКубок: целое число; Чайник: строка[Чайник: Строка = '']

Как я могу изменить декларациюTCellPhone скрыть конструктор предка? например чтобы:

TNokia = class(TCellPhone)
end;

будет иметь только два конструктора:

Кубок: целое числоКубок: целое число; Чайник: строка

Теперь для случая, когдаreintroduce используется, чтобы скрыть не виртуального предка. В предыдущем случаеTiPhone имеет четыре конструктора (в идеале было бы только два - сTComputer как-то скрывает своего предка). Но даже если я не могу исправитьTComputer, я могу изменитьTiPhone иметь только один:

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;

СейчасTiPhone имеет только один конструктор:

Кубок: целое число

Повторное введение обычно используется только для подавления предупреждения о сокрытиивиртуальный предки. В этом случае:

Create(Teapot: string = '')

не виртуальный - все же я все еще могу использовать повторный ввод, чтобы скрыть это.

Носейчас, если я добавлю еще один перегруженTiPhone:

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

Затем внезапно возвращаются (ранее скрытые) предки:

TiPhone.Create (7);TiPhone.Create ( 'розовый');TiPhone.Create (7, «розовый»);TiPhone.Create ();

Как вы видите, я изо всех сил пытаюсь понять логику

когда что-то скрытокак спрятать что-токогда что-то показанокак показать что-то

Ответы на вопрос(4)

Ваш ответ на вопрос