Sobes.tech
Junior — Middle

Leg uit wat de verschillen zijn in het gebruik van de toegangsmodule protected in Java en Kotlin.

sobes.tech AI

Antwoord van AI

In Java betekent de toegangsmodule protected dat het lid van de klasse toegankelijk is:

  • Binnen de klasse zelf
  • In alle afgeleide klassen (zelfs als ze zich in een ander pakket bevinden)
  • In alle klassen binnen hetzelfde pakket

Dus, protected in Java is een combinatie van toegang via overerving en via pakket.

In Kotlin betekent protected echter dat toegang alleen binnen de klasse zelf en haar subklassen is, maar niet toegankelijk vanuit andere klassen in hetzelfde pakket. In Kotlin bestaat het concept van toegang via pakket niet, dus protected is strenger dan in Java.

Voorbeeld:

// 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; // Toegankelijk, omdat in hetzelfde pakket
    }
}

package pkg2;
public class C extends A {
    void test() {
        int val = x; // Toegankelijk, omdat subklasse
    }
}
// Kotlin
open class A {
    protected val x = 10
}

class B : A() {
    fun test() {
        println(x) // Toegankelijk, subklasse
    }
}

class C {
    fun test() {
        val a = A()
        // println(a.x) // Fout: `protected` niet toegankelijk buiten de klasse en haar subklassen
    }
}

Dus, het belangrijkste verschil is dat in Kotlin protected geen toegang via pakket toestaat, alleen via overerving, terwijl in Java beide mogelijk zijn.