ProgrammatieJava ontwikkelaar

Beschrijf hoe de toegangsmethode protected werkt in Java, wat het verschil is met andere toegangsmethoden, en welke fouten kunnen optreden bij een verkeerd begrip ervan.

Slaag voor sollicitatiegesprekken met de Hintsage AI-assistent

Antwoord.

De toegangsmethode protected staat leden van de klasse toe zichtbaar te zijn binnen hetzelfde pakket en in alle subklassen, zelfs als ze zich in andere pakketten bevinden.

Verschillen met andere toegangsmethoden:

  • private — toegang alleen binnen de huidige klasse
  • default (zonder toegangsmethode) — alleen toegankelijk binnen het huidige pakket
  • protected — toegankelijk binnen het huidige pakket en in afgeleiden klassen buiten het pakket
  • public — overal toegankelijk

Voorbeeld:

package com.example.base; public class Parent { protected void sayHello() { System.out.println("Hallo van ouder"); } } package com.example.child; import com.example.base.Parent; public class Child extends Parent { public void tryHello() { sayHello(); // Toegang is er! } } public class NotChild { public void fail(Parent p) { // p.sayHello(); // Fout: geen toegang } }

Vragend met een val.

Kan een externe klasse (geen afgeleide) toegang krijgen tot een protected-methode uit een ander pakket, mits ze een object van die klasse heeft?

Antwoord: Nee, toegang tot een protected-methode uit een ander pakket is alleen toegestaan voor afgeleide klassen, en alleen via this of via een verwijzing naar het afgeleide object, niet naar de ouder.

Parent p = new Child(); p.sayHello(); // Fout! ((Child) p).sayHello(); // Succes (indien aangeroepen binnen Child)

Voorbeelden van echte fouten door onwetendheid over de details van het onderwerp.


Verhaal

In een groot modulair project plaatste een ontwikkelaar belangrijke bedrijfsfuncties in de protected-sectie, in de veronderstelling dat ze niet toegankelijk waren buiten het pakket. Andere ontwikkelaars gebruikten deze methoden per ongeluk in tests binnen hetzelfde pakket, en door het verplaatsen van klassen ontstonden onverwachte toegangsproblemen.


Verhaal

In een microservices-project probeerden ze een methode met protected-toegang aan te roepen via een verwijzing naar het ouder type in een ander pakket — de aanroep werkte niet. Dit veroorzaakte een storing in delen van de uitbreidingsmechanismen van het systeem, omdat men vertrouwde op een onjuiste interpretatie van de zichtbaarheid.


Verhaal

In een open-source bibliotheek werden protected-velden ongepast gebruikt, die toegankelijk bleken voor een te breed scala aan klassen, waardoor per ongeluk de interne toestand van een object beschadigd werd, wat problemen veroorzaakte in externe applicaties.