Programmeren in Java/Geavanceerde klassen
Is een en Heeft een relaties
bewerkenIs een en Heeft een relaties beschrijven de relaties tussen 2 verschillende objecten.
Is een relatie (IS-A)
bewerkenEen is een relatie betekent dat een object van een ander object overerft. Met die eenvoudige woorden kun je ook achterhalen of een object kan overerven van een ander object. Stel je hebt 2 objecten genaamd auto en voertuig. Als je het volgende zinnetje zegt auto is een voertuig dan weet je meteen dat auto kan overerven van voertuig. Als je het volgend zinnetje zegt voertuig is een auto weet je meteen dat het niet klopt en zal voertuig hoogstwaarschijnlijk niet overerven van auto. Dit is een handige test als je wilt zien of je een object wilt laten overerven van een ander object. Als het die test niet overleeft is het afgeraden om de objecten te laten overerven.
Heeft een relatie (HAS-A)
bewerkenEen heeft een relatie betekent dat één object de eigenschap is van een ander object. Auto heeft een stuur dit zinnetje betekent dat een stuur object een eigenschap is van het auto object.
Interface
bewerkenDe klasse die een interface implementeert laat toe dat een andere klasse de public methoden van deze klasse kan aanspreken via een instantie van deze interface. Het object van de klasse weet immers dat als een andere klasse een interface implementeert dat deze over de methoden beschikt die beschreven staan in de interface en deze methoden dus kan aanspreken. Deze zekerheid bestaat doordat een interface een contract is dat aangeeft welke public members een klasse moet hebben die de interface implementeert. De public members kunnen constanten of methoden zijn.
concreet:
Java-code: interfaceA.java
1: public interface interfaceA{
2: void methodeA();
3: void methodeC();
4: }
Java-code: KlasseA.java
1: public class KlasseA implements interfaceA{ //
2: public void methodeA(){
3: System.out.println("methodeA aangeroepen");
4: }
5: public void methodeB(){
6: System.out.println("methodeB aangeroepen");
7: }
8: public void methodeC(){
9: System.out.println("methodeC aangeroepen");
10: }
11: }
Regel 1: implements interfaceA wil zeggen dat KlasseA over alle methoden van de interface moet beschikken
Java-code: KlasseB.java
1: public class KlasseB{
2: private interfaceA objectnaamA;
3:
4: public KlasseB(){
5: objectnaamA=new KlasseA();
6: objectnaamA.methodeA();
7: }
8: public static void main(String[] args){
9: KlasseB objectnaamB=new KlasseB();
10: }
11: }
output: methodeA aangeroepen
Regel 5: hier maak je een instantie van de interface waardoor KlasseB weet dat KlasseA over de methoden beschikt die door het contract (interface) zijn opgemaakt.
Regel 6: hier roep je de public methode aan van de klasse die de interface implementeert.
Merk op dat je via de instantie van de interface de methodeB niet kan aanspreken.
Java-code: KlasseC.java
1: public class KlasseC{
2:
3: public void methodeD(interfaceA item){
4: item.methodeC();
5: }
6:
7: public static void main(String[] args){
8: KlasseA objectnaamA=new KlasseA();
9: KlasseC objectnaamC=new KlasseC();
10: objectnaamC.methodeD(objectnaamA);
11: }
12: }
output : methodeC aangeroepen