Protected - visibilidade

4 respostas
anderson.bonavides

Alguem pode dizer porque da erro de visibilidade nas linhas 19 e 21?
Se eu mudar para public funciona.

class Pai
  def initialize(valor)
    @valor = valor
  end  
  def valor
    @valor
  end
  def valor=(novo_valor)
    @valor = novo_valor
  end
  protected :valor
end

class Filha < Pai
    def initialize(valor)
      @valor = valor
    end
    pai = Pai::new(10)
    puts pai.valor
    pai.valor=(20)
    puts pai.valor
end

4 Respostas

anderson.bonavides

Pensando um pouco melhor no erro e refletindo cheguei a uma conclusão mas não sei se está correto. Os métodos gettrs e settrs em Java são sempre publicos para prover um encapsulamento e manter as variáveis de classe protegidas. O motivo de ta dando erro é porque marquei ela como protected ou isso não influencia no erro?

dm_thiago

Em Java (acredito que em qualquer linguagem) você pode até marcar os métodos getters e setters como private se quiser, que não vai dar erro, não teria porque dar!

Agora eu não conheço nada dessa linguagem (python?) que você está usando então não posso ajudar.

anderson.bonavides

dm_thiago:
Em Java (acredito que em qualquer linguagem) você pode até marcar os métodos getters e setters como private se quiser, que não vai dar erro, não teria porque dar!

Agora eu não conheço nada dessa linguagem (python?) que você está usando então não posso ajudar.

humm ok, mas a linguagem é Ruby. De qualquer forma fico grato.

Alguém mais?

faq

Protected e private são diferentes por aqui.
Dá uma olhada nisso: http://faq.rubygarden.org/entry/show/57?controller_prefix=faq%2F

A sua idéia é colocar o bloco:

pai = Pai::new(10)  
puts pai.valor  
pai.valor=(20)  
puts pai.valor

Pra ser executado na classe Filha? Se esse bloco estiver dentro de um método de instância da classe Filha será executado sem problemas.

Criado 1 de abril de 2008
Ultima resposta 3 de abr. de 2008
Respostas 4
Participantes 3