Java OOP-concepten leren door praktische voorbeelden en oefenprojecten. Ga met mij mee terwijl ik de fundamenten van objectgeoriënteerd programmeren verken!
// Mijn eerste Animal klasse!
public class Animal {
private String naam;
private int leeftijd;
public Animal(String naam, int leeftijd) {
this.naam = naam;
this.leeftijd = leeftijd;
}
public void maakGeluid() {
System.out.println("Een algemeen dierengeluid");
}
public String getNaam() {
return naam;
}
}
Leren om data te beschermen met private velden en publieke methoden. Begrijpen waarom we implementatiedetails verbergen.
Ouder- en kindklassen maken om gemeenschappelijke functionaliteit te delen. Oefenen met het extends sleutelwoord en methode-overschrijving.
Begrijpen hoe dezelfde methode zich anders kan gedragen afhankelijk van het objecttype. Interfaces en methode-overschrijving verkennen.
Leren over abstracte klassen en interfaces. Begrijpen hoe je definieert wat klassen moeten doen zonder te specificeren hoe.
public class BankRekening {
private double saldo;
private String rekeningNummer;
public BankRekening(String rekeningNummer, double beginSaldo) {
this.rekeningNummer = rekeningNummer;
setSaldo(beginSaldo);
}
public void stort(double bedrag) {
if (bedrag > 0) {
saldo += bedrag;
System.out.println("Gestort: €" + bedrag);
}
}
public boolean neemOp(double bedrag) {
if (bedrag > 0 && bedrag <= saldo) {
saldo -= bedrag;
System.out.println("Opgenomen: €" + bedrag);
return true;
}
return false;
}
public double getSaldo() {
return saldo;
}
private void setSaldo(double saldo) {
this.saldo = Math.max(0, saldo);
}
}
Rekening: REK-001
Saldo: €1000,00
// Basisklasse
public abstract class Voertuig {
protected String merk;
protected int jaar;
public Voertuig(String merk, int jaar) {
this.merk = merk;
this.jaar = jaar;
}
public abstract void start();
public abstract double getBrandstofVerbruik();
public void toonInfo() {
System.out.println(jaar + " " + merk);
}
}
// Afgeleide klasse
public class Auto extends Voertuig {
private int deuren;
public Auto(String merk, int jaar, int deuren) {
super(merk, jaar);
this.deuren = deuren;
}
@Override
public void start() {
System.out.println("Auto motor gestart met sleutel");
}
@Override
public double getBrandstofVerbruik() {
return 8.5; // L/100km
}
}
// Nog een afgeleide klasse
public class Motorfiets extends Voertuig {
private boolean heeftZijspan;
public Motorfiets(String merk, int jaar, boolean heeftZijspan) {
super(merk, jaar);
this.heeftZijspan = heeftZijspan;
}
@Override
public void start() {
System.out.println("Motorfiets gestart met knop");
}
@Override
public double getBrandstofVerbruik() {
return 4.2; // L/100km
}
}
Selecteer een voertuigtype om overerving in actie te zien!
public interface Tekenbaar {
void teken();
double berekenOppervlakte();
}
public class Cirkel implements Tekenbaar {
private double straal;
public Cirkel(double straal) {
this.straal = straal;
}
@Override
public void teken() {
System.out.println("Een cirkel tekenen");
}
@Override
public double berekenOppervlakte() {
return Math.PI * straal * straal;
}
}
public class Rechthoek implements Tekenbaar {
private double breedte, hoogte;
public Rechthoek(double breedte, double hoogte) {
this.breedte = breedte;
this.hoogte = hoogte;
}
@Override
public void teken() {
System.out.println("Een rechthoek tekenen");
}
@Override
public double berekenOppervlakte() {
return breedte * hoogte;
}
}
// Polymorf gebruik
public class VormBeheerder {
public void verwerkVormen(Tekenbaar[] vormen) {
for (Tekenbaar vorm : vormen) {
vorm.teken(); // Polymorfe aanroep
System.out.println("Oppervlakte: " + vorm.berekenOppervlakte());
}
}
}
// Abstracte klasse die het contract definieert
public abstract class DatabaseVerbinding {
protected String verbindingsString;
public DatabaseVerbinding(String verbindingsString) {
this.verbindingsString = verbindingsString;
}
// Abstracte methoden - moeten geïmplementeerd worden door subklassen
public abstract void verbind();
public abstract void verbreekVerbinding();
public abstract boolean voerQueryUit(String query);
// Concrete methode - gemeenschappelijk voor alle implementaties
public void logOperatie(String operatie) {
System.out.println("[" + this.getClass().getSimpleName() + "] " + operatie);
}
}
// Concrete implementatie voor MySQL
public class MySQLVerbinding extends DatabaseVerbinding {
public MySQLVerbinding(String verbindingsString) {
super(verbindingsString);
}
@Override
public void verbind() {
logOperatie("Verbinding maken met MySQL database...");
// MySQL-specifieke verbindingslogica
}
@Override
public void verbreekVerbinding() {
logOperatie("Verbinding verbreken met MySQL database...");
// MySQL-specifieke verbreek logica
}
@Override
public boolean voerQueryUit(String query) {
logOperatie("MySQL query uitvoeren: " + query);
return true; // Gesimuleerd succes
}
}
// Concrete implementatie voor PostgreSQL
public class PostgreSQLVerbinding extends DatabaseVerbinding {
public PostgreSQLVerbinding(String verbindingsString) {
super(verbindingsString);
}
@Override
public void verbind() {
logOperatie("Verbinding maken met PostgreSQL database...");
// PostgreSQL-specifieke verbindingslogica
}
@Override
public void verbreekVerbinding() {
logOperatie("Verbinding verbreken met PostgreSQL database...");
// PostgreSQL-specifieke verbreek logica
}
@Override
public boolean voerQueryUit(String query) {
logOperatie("PostgreSQL query uitvoeren: " + query);
return true; // Gesimuleerd succes
}
}
Klik op "Code Uitvoeren" om de Java code uit te voeren en de uitvoer hier te zien! // Dit zal tonen: // - Dierengeluiden (polymorfisme) // - Bankrekening operaties (encapsulatie) // - Leernotities over OOP concepten // TIP: Probeer diernamen, leeftijden of rekeningsaldi te veranderen! // De code parser is flexibel en past zich aan jouw wijzigingen aan. Klaar wanneer jij het bent! 🚀
Mijn eerste spel met basis OOP! Verschillende karakterklassen gemaakt die overerven van een Speler klasse. Leren over constructors en methode-overschrijving.
Een console-app om studentencijfers te berekenen. Encapsulatie gebruikt om studentdata te beschermen en methoden gemaakt voor cijferberekeningen. Nog steeds leren over getters/setters!
Leerproject met Hond en Kat klassen die overerven van Dier. Methode-overschrijving geoefend voor verschillende dierengeluiden. Mijn eerste poging tot polymorfisme!
Console-applicatie om boeken en gebruikers te beheren. Leren over klasserelaties en basis CRUD-operaties. Nog steeds bezig met het begrijpen van interfaces!
Dit zijn werkende implementaties van de projecten die ik heb gebouwd tijdens het leren van Java OOP. Klik op elk project om ze uit te proberen!
Een basis RPG met verschillende karakterklassen
Welkom bij mijn eerste OOP spel! Selecteer een karakter om te beginnen.
Oefenen met encapsulatie en datavalidatie
Nog geen studenten toegevoegd. Voeg een student toe om encapsulatie in actie te zien!
Overerving en polymorfisme met dieren
Nog geen huisdieren! Voeg wat huisdieren toe om overerving en polymorfisme werkend te zien.
Klasserelaties en basis CRUD-operaties
Bibliotheek is leeg. Voeg wat boeken toe om te beginnen!