Sobes.tech
Junior — Middle

Selgitage kaitsega ligipääsu modifikaatori kasutamise erinevusi Java ja Kotlin keeles.

sobes.tech AI

Vastus AI-lt

Java keeles protected juurdepääsukorraldaja tähendab, et klassi liige on kättesaadav:

  • Oma klassi sees
  • Kõigis pärilikes klassides (isegi kui need asuvad teises paketis)
  • Kõigis samas paketis olevates klassides

Seega, protected Java keeles on kombinatsioon pärimise ja paketi kaudu juurdepääsust.

Kotlinis tähendab protected aga, et juurdepääs on ainult klassi ja selle alamklasside sees, aga mitte teiste klasside poolt samas paketis. Kotlinis puudub paketipõhine juurdepääs, seega on protected rangem kui Java keeles.

Näide:

// 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; // Juurdepääsetav, kuna samas paketis
    }
}

package pkg2;
public class C extends A {
    void test() {
        int val = x; // Juurdepääsetav, kuna alamklass
    }
}
// Kotlin
open class A {
    protected val x = 10
}

class B : A() {
    fun test() {
        println(x) // Juurdepääsetav, kuna alamklass
    }
}

class C {
    fun test() {
        val a = A()
        // println(a.x) // Viga: `protected` ei ole juurdepääsetav väljaspool klassi ja selle alamklasse
    }
}

Seega, peamine erinevus on see, et Kotlinis protected ei võimalda juurdepääsu paketi kaudu, vaid ainult pärimise kaudu, samas kui Java võimaldab mõlemat.