Junior — Middle
Explique as diferenças na utilização do modificador de acesso protected nas linguagens Java e Kotlin.
sobes.tech IA
Resposta da IA
Em Java, o modificador de acesso protected significa que o membro da classe é acessível:
- Dentro da própria classe
- Em todas as classes herdadas (mesmo que estejam em pacotes diferentes)
- Em todas as classes dentro do mesmo pacote
Ou seja, protected em Java é uma combinação de acesso por herança e por pacote.
Em Kotlin, no entanto, protected significa acesso apenas dentro da própria classe e suas subclasses, mas não acessível de outras classes do mesmo pacote. Em Kotlin, não há conceito de acesso por pacote, por isso protected é mais restritivo do que em Java.
Exemplo:
// Java
package pkg1;
public class A {
protected int x = 10;
}
package pkg1;
public class B {
void test() {
A a = new A();
int val = a.x; // Acessível, pois no mesmo pacote
}
}
package pkg2;
public class C extends A {
void test() {
int val = x; // Acessível, pois é um herdeiro
}
}
// Kotlin
open class A {
protected val x = 10
}
class B : A() {
fun test() {
println(x) // Acessível, herdeiro
}
}
class C {
fun test() {
val a = A()
// println(a.x) // Erro: `protected` não acessível fora da classe e seus herdeiros
}
}
Portanto, a principal diferença é que em Kotlin protected não permite acesso por pacote, apenas por herança, enquanto que em Java permite ambos.