2015-07-04 10 views
6

Ich habe Code wie folgt:Ist Ruby private Methode in Unterklasse zugänglich?

class A 
    private 
    def p_method 
    puts "I'm a private method from A" 
    end 
end 

class B < A 
    def some_method 
    p_method 
    end 
end 

b = B.new 
b.p_method # => Error: Private method can not be called 
b.some_method # => I'm a private method from A 

b.some_method eine private Methode aufruft, die A in der Klasse definiert ist. Wie kann auf eine private Methode in der Klasse zugegriffen werden, in der sie vererbt wird? Ist dieses Verhalten in allen objektorientierten Programmiersprachen gleich? Wie macht Ruby Kapselung?

+0

[Gibt es gute Gründe für die 'private', wie es funktioniert in Ruby arbeiten?] (Https: // stackoverflow.com/questions/1565269/are-there-good-reasons-for-private-to-work-the-way-it-does-in-ruby) – cremno

+0

Sie greifen tatsächlich auf die private Methode 'p_method' Ihrer Basis zu Klasse aus dem Instanzbereich der Subklasse, gut. Es ist offensichtlich, warum Sie von außen nicht darauf zugreifen können. Der private Bereich bleibt erhalten, er wird sich nicht ändern, wenn Sie eine Unterklasse verwenden. – limekin

+0

Wie ist die Vererbung oder Kapselung für das Problem der privaten Methoden relevant? – sawa

Antwort

6

Hier ist eine kurze Erklärung von this source:

  1. öffentlichen Methoden können von jedermann aufgerufen werden --- gibt es keine Zugriffskontrolle. Methoden sind standardmäßig öffentlich (außer initialize, das immer privat ist).
  2. Geschützte Methoden können nur von Objekten der definierenden Klasse und ihrer Unterklassen aufgerufen werden. Der Zugang wird innerhalb der Familie gehalten.
  3. Private Methoden können nicht mit einem expliziten Empfänger aufgerufen werden. Da Sie bei der Verwendung eines Objekts kein Objekt angeben können, können private Methoden nur in der definierenden Klasse und durch direkte Nachkommen in demselben Objekt aufgerufen werden.

Diese Antwort aus einer ähnlichen Frage näher zu dem Thema erweitert: https://stackoverflow.com/a/1565640/814591

+0

Danke. Sie sind genug erklärt. –

Verwandte Themen