Sobes.tech
Junior — Middle

Vysvetlite rozdiely v používaní modifikátora prístupu protected v jazykoch Java a Kotlin.

sobes.tech AI

Odpoveď od AI

V Jave, modifikátor prístupu protected znamená, že člen triedy je dostupný:

  • Vo vnútri samotnej triedy
  • Vo všetkých dediace triedach (aj keď sú v inom balíku)
  • Vo všetkých triedach v tom istom balíku

To znamená, že protected v Jave je kombinácia prístupu cez dedičstvo a cez balík.

V Kotlin-e však protected znamená prístup iba v rámci samotnej triedy a jej podtried, ale nie je dostupný z iných tried toho istého balíka. V Kotlin-e neexistuje koncept prístupu cez balík, preto je protected prísnejší ako v Jave.

Prí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; // Dostupné, pretože v tom istom balíku
    }
}

package pkg2;
public class C extends A {
    void test() {
        int val = x; // Dostupné, pretože podtrieda
    }
}
// Kotlin
open class A {
    protected val x = 10
}

class B : A() {
    fun test() {
        println(x) // Dostupné, pretože podtrieda
    }
}

class C {
    fun test() {
        val a = A()
        // println(a.x) // Chyba: `protected` nie je dostupné mimo triedy a jej podtried
    }
}

Hlavná rozdielnosť je teda v tom, že v Kotlin-e protected neumožňuje prístup cez balík, iba cez dedičstvo, zatiaľ čo v Jave — aj jedno, aj druhé.