是否可以继承嵌套类?

时间:2009-07-21 09:26:17

标签: delphi oop class

好吧,我有一个父类,在“受保护”选项卡中使用受保护的类变量声明了一个嵌套类。在另一个单元中,我有一个子类,它继承自父类。当我尝试访问受保护的东西时来自父类的/ public工作,但是当我尝试访问受嵌套类保护的东西时,它不起作用。

type
  TParent = class(TObject)

  protected
    class var x:integer;
    type
      TNested = class(TObject)

        protected
          class var y:integer;
    end;
end;

我在子类中的代码:

x := 10; //works
y := 10; //undeclarated idenitifier 'y'.
TNested.y := 10; //undeclarated idenitifier 'y'

子类的声明是:

type
  TChild = class(TParent);

如何访问y?

4 个答案:

答案 0 :(得分:3)

y:integer是TNested类的受保护字段,即。只能由TNested和它自己的继承类使用。
您可能可以使用来自TParent的TNested,但这是因为在Delphi中,如果从同一个单元调用,您可能拥有更大的访问权限。因此TParent和TNested在同一个单元中,因此您可以从TParent调用TNested受保护的数据。但由于TChild与TNested不同,所以不可能。

答案 1 :(得分:0)

如果TChild和TParent在同一个单元中,这将实现工作,因为单元内的类之间存在隐含的友谊。

要在示例中访问y,您需要执行以下两项操作之一:

  1. 将y的范围更改为public(或为其创建公共属性)。
  2. 使用源自TNested的嵌套类中的y。

答案 2 :(得分:0)

TParent.x := 10;
TParent.TNested.y := 10;

答案 3 :(得分:0)

您提供的示例是使用嵌套类,而不是继承它。

嵌套分类可以在声明类的子类中继承:

TSubParent = class(TParent)
protected
  type 
   TSubNested = class(TNested)
   public
     class var Z : integer;
   end;
end;