Der Versuch, ein öffentliches Mitglied einer Klasse in einer abgeleiteten Klasse zu verstecken, ist generell eine schlechte Sache (*). Der Versuch, es zu verbergen, um sicherzustellen, dass es nicht aufgerufen wird, ist noch schlimmer und wird im Allgemeinen nicht funktionieren.
Es gibt keine standardisierten idiomatischen Mittel, die ich kenne, um zu verhindern, dass ein geschütztes Mitglied der Elternklasse auf einen untergeordneten Typ zugreift, aber ein neues öffentliches nutzloses Mitglied einer eindeutig nutzlosen Art zu deklarieren wäre ein Ansatz . Das Einfachste wäre eine leere Klasse. Wenn zum Beispiel die Klasse Foo eine leere öffentliche Klasse namens MemberwiseClone deklariert, können Abkömmlinge von Foo MemberwiseClone nicht aufrufen - wahrscheinlich eine gute Sache, wenn MemberwiseClone die Invarianten der Klasse Foo aufbrechen würde.
(*) Die einzige Situation, in der es angebracht ist, wenn eine öffentliche Methode einer abgeleiteten Klasse einen spezialisierteren Typ zurückgibt als die entsprechende Methode in der Basisklasse (zB eine CarFactory.Produce() Methode kann ein Auto zurückgeben, während die FordExplorerFactory.Produce() - Methode einen FordExplorer zurückgeben kann (der von Auto abgeleitet wird). Jemand, der Produce() auf eine CarFactory (aber zufällig eine FordExplorerFactory) aufruft, bekommt ein Auto (was zufällig ein Auto ist) FordExplorer), aber jemand, der Produce() auf dem, was zur Kompilierzeit als FordExplorerFactory bekannt ist, aufruft, erhält ein Ergebnis, das zur Kompilierzeit als FordExplorer bekannt ist.
+1: Liebe die "Eltern vs Freunde" -Metapher:) –