자식 클래스는 부모 클래스의 보호 된 함수에 액세스 할 수 있지만 부모 클래스는 자식 클래스의 보호 된 함수에 액세스 할 수 없습니다.하위 클래스의 함수에 액세스하는 방법은 무엇입니까?
가능한 한 개인 클래스로 두 클래스를 유지하고 싶습니다. 부모 클래스는 폼이며 한 번 인스턴스 만 사용됩니다. 자식 클래스의 모든 함수는 정적이며 부모 클래스에서 상속됩니다.
부모 클래스의 자식 클래스 (다른 단위)의 비공개 정적 메서드에 액세스하려면 어떻게해야합니까?
편집 :
부모 클래스 (최초 단위) :
interface
type
TParent = class
public
procedure Initialize;
protected
procedure Test; virtual;
end;
implementation
procedure TParent.Initialize;
begin
Writeln('Initializing');
Test;
end;
procedure TParent.Test;
begin
end;
아이 클래스 (두 번째 단위) :
interface
uses
ParentClass;
type
TChild = class(TParent)
protected
procedure Test;override;
end;
implementation
procedure TChild.Test;
begin
Writeln('Test!');
end;
코드 (제 3 단위) :
var c:TParent;
begin
try
c := c.Create;
c.Initialize;
c.Free;
Readln;
end;
출력은 "초기화 중"입니다. 디버깅하려했으나 하위 클래스에 도달하지 않았습니다.
그것은 자식 클래스에 도달하지보십시오. 만들기를 변경하여 C : = TChild.Create를 읽으면 작동합니다. – skamradt
클래스를 잘못 인스턴스화합니다. 전에 네가 그 얘길 들었다고 생각해. 컴파일러가'c.Create'를 호출했을 때 경고하지 않았습니까? 'TChild'의 인스턴스를 만들고 싶다면, 그 클래스 * :'TChild.Create'에 생성자를 호출해야합니다. –