76 lines
988 B
ObjectPascal
76 lines
988 B
ObjectPascal
type TClass = class
|
|
protected f: integer;
|
|
internal
|
|
procedure Test(a : integer); abstract;
|
|
end;
|
|
|
|
TClass2 = class(TClass)
|
|
procedure Test(a : integer); override;
|
|
begin
|
|
end;
|
|
end;
|
|
|
|
TClass3 = class(TClass)
|
|
procedure Test2(k : real); abstract;
|
|
end;
|
|
|
|
TClass4 = class(TClass3)
|
|
constructor;
|
|
begin
|
|
f := 4;
|
|
end;
|
|
procedure Test(a : integer); override;
|
|
begin
|
|
assert(f = 4);
|
|
end;
|
|
procedure Test2(k : real); override;
|
|
begin
|
|
assert(f = 4);
|
|
end;
|
|
end;
|
|
|
|
TClass5 = class(TClass2)
|
|
procedure Test3; abstract;
|
|
end;
|
|
|
|
TClass6 = class(TClass5)
|
|
constructor;
|
|
begin
|
|
f := 6;
|
|
end;
|
|
procedure Test3; override;
|
|
begin
|
|
assert(f = 6);
|
|
end;
|
|
end;
|
|
|
|
TClass7 = abstract class
|
|
a: integer;
|
|
procedure Test; virtual;
|
|
begin
|
|
a := 5;
|
|
end;
|
|
end;
|
|
|
|
TClass8 = class(TClass7)
|
|
procedure Test; override;
|
|
begin
|
|
a := 3;
|
|
end;
|
|
end;
|
|
|
|
var t : TClass;
|
|
t2 : TClass3;
|
|
t3 : TClass5;
|
|
|
|
begin
|
|
t := new TClass2;
|
|
t.Test(2);
|
|
t2 := new TClass4;
|
|
t2.Test2(2.3);
|
|
t3 := new TClass6;
|
|
t3.Test3;
|
|
var t4 := new TClass8;
|
|
t4.Test;
|
|
assert(t4.a=3);
|
|
end. |