Jupp, von der Definition her ist es erstmal rech einfach zu verstehen:
private kann nur die Klasse selber, also auch keine Nachfahren
protected kann nur die Klasse und ihre Nachfahren
public können Alle
und
published ist wie
public mit Zusatzinfos für das Streaming, also da können auch auch fremde Klassen über die TypeInfo (
RTTI) drauf zugreifen.
published: siehe
Unit TypInfo sowie
TObject.MethodAddress,
TObject.MethodName und
TObject.FieldAddress.
Für Klassen ab
TPersistent/TComponent ist die Standatd-Sichtbarkeit von
public auf
published geändert > siehe
{$TYPEINFO} / {$M+}
Diese Funktionen werden z.B. für das Streaming der
DFM verwendet.
Und dann noch der Sonderfall innerhalb der eigenen
Unit.
Innerhalb einer
Unit ist ALLES dort Deklarierte wie
public, also auch fremde Prozeduren und Klassen dürfen auf alles zugreifen.
Darum wurde inzwischen das
strict eingeführt, also
strict private und
strict protected sind nur dort so, wie es die Grunddefinion für
private und
protected besagt.