如果两个类都放在一个单元中 - 没有问题,子类从父类继承私有方法,但如果它们在不同的单元中,则类只能访问公共方法.为什么?
子类只能因为它们位于不同的单元中而无法访问私有方法.
我该如何避免这种情况?在我的情况下,我有3个子类,如果我将它们全部放在父类的单元中,结果将非常大.
如何创建一个从不同单元的父类继承私有方法的子类?
谢谢!
私有方法是(单位)私有的.您需要的是受保护的方法.受保护的方法可以由任何继承自基类的类访问,即使它们位于不同的单元中.用户代码无法访问它们(除非他继承自该类).
unit A;
interface
type
TBase = class(TObject)
private
procedure PrivateTest;
protected
procedure ProtectedTest;
end;
implementation
procedure TBase.PrivateTest;
begin
end;
procedure TBase.ProtectedTest;
begin
end;
end.
Run Code Online (Sandbox Code Playgroud)
#
unit B;
interface
uses
A;
type
TDerived = class(TBase)
public
procedure Test;
end;
implementation
procedure TDerived.Test;
begin
// PrivateTest; // compile error
ProtectedTest; // accepted by the compiler
end;
end.
Run Code Online (Sandbox Code Playgroud)
#
unit C;
interface
uses
A, B;
implementation
var
Base: TBase;
Derived: TDerived;
initialization
Base := TBase.Create;
Derived := TDerived.Create;
// Base.PrivateTest; // compile error
// Base.ProtectedTest; // compile error
// Derived.PrivateTest; // compile error
// Derived.ProtectedTest; // compile error
Derived.Test; // accepted by the compiler
Derived.Free;
Base.Free;
end;
Run Code Online (Sandbox Code Playgroud)