Programmeren in Java/Overerving

Uit Wikibooks

Programmeren in Java In ontwikkeling. Revisiedatum: onbekend

Inleiding Redelijk ontwikkeld. Revisiedatum: 22 augustus 2008

Installatie In ontwikkeling. Revisiedatum: 26 decemeber 2020

Hulpmiddelen Nog vrijwel niets. Revisiedatum: 26 decemeber 2020
  1. Introductie Goed ontwikkeld. Revisiedatum: 19 januari 2021
  2. Klassen Redelijk ontwikkeld. Revisiedatum: 22 januari 2021
  3. Package Goed ontwikkeld. Revisiedatum: 28 januari 2021
  4. Private en Public Goed ontwikkeld. Revisiedatum: 27 december 2020
  5. Getters en Setters Goed ontwikkeld. Revisiedatum: 19 januari 2021
  6. Static Goed ontwikkeld. Revisiedatum: 16 maart 2021
  7. Overerving In ontwikkeling. Revisiedatum: 20 januari 2007
  8. Protected Nog vrijwel niets. Revisiedatum: 22 januari 2021
  9. Abstract Nog vrijwel niets. Revisiedatum: 22 januari 2021
  10. Interfaces Nog vrijwel niets. Revisiedatum: 19 januari 2021
  11. Enums Goed ontwikkeld. Revisiedatum: 15 augustus 2020
  12. Generics Nog vrijwel niets. Revisiedatum: 19 januari 2021
  13. Boxing en Unboxing Goed ontwikkeld. Revisiedatum: 22 januari 2021
  14. Optional Nog vrijwel niets. Revisiedatum: 21 december 2020
  15. Functionele interfaces Nog vrijwel niets. Revisiedatum: 19 januari 2021
Appendices

Nu dat je klassen hebt gezien en misschien ondertussen meerdere klassen hebt gemaakt, zal je misschien al hebben gemerkt dat je klassen hebt die verwant zijn aan elkaar. Je hebt misschien een klasse geschreven voor een Car (auto), Bus, Bicycle (fiets), enzoverder.. Allemaal zijn ze voertuigen, machines die we gebruiken om ons te verplaatsen. Ze hebben misschien bepaalde eigenschappen of functionaliteit gemeen. Sommige hebben een motor, andere niet, sommige hebben passagiers, andere weer niet, sommige hebben bovendien véél passagiers en andere minder, enzoverder...

Je kunt deze eigenschappen en functionaliteiten per klasse apart definiëren, maar dat is weer véél dubbel werk en kan ook weer leiden tot meer fouten. Wat je kunt doen is voor deze klassen een overkoepelende klasse maken die alle eigenschappen en functionaliteiten kan bevatten en waar de onderliggende klassen gebruik van kan maken.

Simpel voorbeeld[bewerken]

Uitgebreid voorbeeld[bewerken]

In onderstaand voorbeeld is de klasse BankAccount(bankrekening) de verzameling van alle gemeenschappelijke velden en methoden. De klassen SavingsAccount (spaarrekening) en CurrentAccount (zichtrekening) bevatten de gespecialiseerde gegevens. Men spreekt in dit verband ook over generalisatie en specialisatie. De klasse BankAccount is de basisklasse (of de superklasse of de parentklasse) van de SavingsAccount en de CurrentAccount. De SavingsAccount en de CurrentAccount zijn de subklassen (of de childclasses of de derived- of afgeleide klassen) van de BankAccount.

public class BankAccount {
    private final String accountNumber;
    public double amount;

    public BankAccount(String accountNumber){
        this.accountNumber = accountNumber;
        amount = 0;
    }
    public void deposit(double amount) {
        this.amount += amount;
    }
    public void withdraw(double amount) {
        this.amount -= amount;
    }
    public void transfer(BankAccount bankAccount, double amount) {
        this.amount -= amount;
        bankAccount.deposit(amount);
    }
    public double getAmount() {
        return amount;
    }
}
public class CurrentAccount extends BankAccount {
    private final int maxCredit;

    public CurrentAccount(String accountNumber, int maxCredit) {
        super(accountNumber);
        maxCredit = maxCredit;
    }
}
public class SavingsAccount extends BankAccount {
    private static double interest;

    public SavingsAccount(String accountNumber, double interest) { //constructor
        super(accountNumber);
        this.interest = interest;
    }

    public SavingsAccount(String accountNumber, double interest, double amount) {
        this(accountNumber, interest);
        this.amount = amount;
    }

    public void deposit(double amount) {
        this.amount += amount;
    }

    public void withdraw(double amount) {
        this.amount -= amount;
    }

    public void overschrijven(SavingsAccount spaarRek, double amount) {
        this.amount -= amount;
        spaarRek.deposit(amount);
    }

    public double getAmount() {
        return amount;
    }

    public static double getInterest() {
        return interest;
    }
}
public class Main {
    
    public static void main(String[] args) {
        SavingsAccount savingsAccount = new SavingsAccount("1234", 2.5);
        CurrentAccount currentAccount = new CurrentAccount("9876", 1000);
        savingsAccount.deposit(100.0);
        currentAccount.deposit(200.0);
        currentAccount.withdraw(50.0);
        System.out.println("Saldo van spaarrekening: " + savingsAccount.getAmount());
        System.out.println("Saldo van zichtrekening: " + currentAccount.getAmount());
    }
}

(Merk op dat double een binaire komma heeft en dus niet geschikt is voor exacte berekeningen met decimale fracties. In het echt zou hier een integertype voor gebruikt worden.)

Informatie afkomstig van https://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.