gpt4 book ai didi

delphi - 为什么我的子类没有继承父类的所有方法?

转载 作者:行者123 更新时间:2023-12-03 18:56:18 24 4
gpt4 key购买 nike

如果两个类都放在一个单元中——没有问题,子类继承父类的私有(private)方法,但如果它们在不同单元中,则该类只能访问公共(public)方法。为什么?

子类不能访问私有(private)方法只是因为它们在不同的单元中。

我该如何避免这种情况?就我而言,我有 3 个子类,如果我将它们全部放在父类的单元中,结果将非常大。

如何创建一个子类,以不同的单元从父类继承私有(private)方法?

谢谢!

最佳答案

私有(private)方法是(单位)私有(private)的。您需要的是一种 protected 方法。任何从基类继承的类都可以访问 protected 方法,即使它们位于不同的单元中。用户代码无法访问它们(除非他从类继承)。

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.

#
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.

#
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;

关于delphi - 为什么我的子类没有继承父类的所有方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1136581/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com