Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Aula 04 Questão 08 Item A

Com relação ao item A, questão 08 da aula 04,

"Não podemos utilizar o modificador de acesso privado para membros abstratos."

Explicação:

"Exato. A menor restrição possível é o acesso protegido, que permite que as tanto a superclass como as classes filhas acessem o membro. Portanto, se o membro for abstrato, alguém que esteja herdando da classe abstrata precisa ter acesso também".

Considero, que a resposta não está correta! No meu entendimento, uma classe abstrata pode sim ter atributos privados, por exemplo quando os mesmos devem ser utilizados por outros métodos privados da própria classe, ou seja, quando não for necessário que as subclasses tenham conhecimento destes métodos privados e consequentemente dos atributos privados. Segue um exemplo hipotético:

abstract class A {
    private var x = 1

    private fun incX() {
        x++
    }

    private fun decX() {
        x--
    }  

    fun iAmPublic() { ... }
}

class ChildA: A() { ... }

Naturalmente é uma situação rara, mas possível. Se concorda ou não, coloque suas considerações.

Att.

2 respostas
solução!

Oi Eduardo, blz?

Muito boa a sua observação, mas membros abstratos faz referência a properties ou funções da classe, exemplo:

abstract class A {

    abstract val x: Integer

    abstract fun y()

}

Tanto x como y não podem ser privados, o menor acesso possível é o protected para que sejam implementados.

[]s

Olá Alex, obrigado pela resposta.

De fato a resposta do exrcício está correta:

"Exato. A menor restrição possível é o acesso protegido, que permite que as tanto a superclass como as classes filhas acessem o membro. Portanto, se o membro for abstrato, alguém que esteja herdando da classe abstrata precisa ter acesso também".

Obrigado.