Sobes.tech
Junior — Middle

Vysvětlete rozdíly v používání modifikátoru přístupu protected v jazycích Java a Kotlin.

sobes.tech AI

Odpověď od AI

V Javě znamená modifikátor přístupu protected, že člen třídy je přístupný:

  • V rámci samotné třídy
  • Ve všech dědících třídách (i když jsou v jiném balíčku)
  • Ve všech třídách ve stejném balíčku

To znamená, že protected v Javě je kombinací přístupu přes dědičnost a přes balíček.

V Kotlinu však protected znamená přístup pouze uvnitř samotné třídy a jejích podtříd, ale není přístupný z jiných tříd ve stejném balíčku. V Kotlinu neexistuje koncept přístupu přes balíček, proto je protected přísnější než v Javě.

Příklad:

// 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; // Přístupné, protože ve stejném balíčku
    }
}

package pkg2;
public class C extends A {
    void test() {
        int val = x; // Přístupné, protože podtřída
    }
}
// Kotlin
open class A {
    protected val x = 10
}

class B : A() {
    fun test() {
        println(x) // Přístupné, podtřída
    }
}

class C {
    fun test() {
        val a = A()
        // println(a.x) // Chyba: `protected` není přístupný mimo třídu a její podtřídy
    }
}

Proto hlavní rozdíl je, že v Kotlinu protected neumožňuje přístup přes balíček, pouze přes dědičnost, zatímco v Javě je to možné obojí.