Programmeren in Java/Overerving: verschil tussen versies

Verwijderde inhoud Toegevoegde inhoud
DimiC88 (overleg | bijdragen)
k -navigatie sjabloon, opkuisen
DimiC88 (overleg | bijdragen)
k Eerste aanzet om hoofdstuk te herschrijven.
Label: bewerking met nieuwe wikitekstmodus
Regel 1:
{{Programmeren in Java|Deel=Klassen}}
Nu dat je klassen hebt gezien en misschien ondertussen meerdere klassen hebt gemaakt, zal het 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...
In onderstaand voorbeeld is de klasse Rekening de verzameling van alle gemeenschappelijke datamembers en methods. De klassen Spaarrekening en Zichtrekening bevatten de gespe­cia­liseerde gegevens. Men spreekt in dit verband ook over generalisatie en specialisatie. De klasse Rekening is de baseclass (of de superklasse of de parentklasse) van de Spaarrekening en de Zichtrekening.
 
De Spaarrekening en de Zichtrekening zijn de subklassen (of de childclasses of de derived- of afgeleide klassen) van de Rekening.
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.
 
==Simple voorbeeld==
 
 
==Uitgebreid voorbeeld==
In onderstaand voorbeeld is de klasse Rekening''BankAccount''(bankrekening) de verzameling van alle gemeenschappelijke datamembersvelden en methodsmethoden. De klassen Spaarrekening''SavingsAccount''(spaarrekening) en Zichtrekening''CurrentAccount''(zichtrekening) bevatten de gespe­cia­liseerde gegevens. Men spreekt in dit verband ook over generalisatie en specialisatie. De klasse Rekening''BankAccount'' is de baseclassbasisklasse (of de superklasse of de parentklasse) van de Spaarrekening''SavingsAccount'' en de Zichtrekening''CurrentAccount''. De ''SavingsAccount'' en de ''CurrentAccount'' zijn de subklassen (of de childclasses of de derived- of afgeleide klassen) van de ''BankAccount''.
 
<syntaxhighlight lang="java">
public class RekeningBankAccount {
private String rekeningNraccountNumber;
public double saldoamount;
 
public RekeningBankAccount(String nraccountNumber){ //constructor
this.accountNumber = accountNumber;
rekeningNr = nr;
saldo amount = 0;
}
public void storten deposit(double bedragamount) {
saldo this.amount += bedragamount;
}
public void afhalen withdraw(double bedragamount) {
saldo this.amount -= bedragamount;
}
public void overschrijventransfer(RekeningBankAccount rekbankAccount, double bedragamount) {
saldo this.amount -= bedragamount;
rek bankAccount.stortendeposit(bedragamount);
}
public double getSaldogetAmount() {
return saldoamount;
}
}
</syntaxhighlight>
 
<syntaxhighlight lang="java">
public class ZichtRekeningCurrentAccount extends RekeningBankAccount {
private int maxKredietmaxCredit;
 
public ZichtRekening(String rnr, int bedrag) { //constructor
public CurrentAccount(String accountNumber, int maxCredit) {
super(rnraccountNumber);
maxKrediet = bedrag;
maxCredit = maxCredit;
}
}
</syntaxhighlight>
 
<syntaxhighlight lang=java>
public class SpaarRekeningSavingsAccount extends RekeningBankAccount {
import java.util.*;
private static double interest;
public class SpaarRekening extends Rekening{
 
private static double interest;
public ZichtRekeningSavingsAccount(String rnraccountNumber, double int bedraginterest) { //constructor
/** Creates a new instance of SpaarRekening */
super(rnraccountNumber);
public SpaarRekening(String rnr, double interest) { //constructor
this.interest = interest;
super(rnr);
this.interest = interest;
}
 
public SpaarRekeningSavingsAccount(String reknraccountNumber, double interest, double beginSaldoamount) {
this(reknr, interest);
saldothis(accountNumber, = beginSaldointerest);
this(reknr,.amount interest)= amount;
}
 
public void stortendeposit(double bedragamount) {
saldothis.amount += bedragamount;
}
 
public void afhalenwithdraw(double bedragamount) {
saldothis.amount -= bedragamount;
}
 
public void overschrijven(SpaarRekeningSavingsAccount spaarRek, double bedrag, Date datumamount) {
saldo -= bedrag;
spaarRekthis.storten(bedrag)amount -= amount;
spaarRek.deposit(amount);
}
 
public void overschrijven(SpaarRekeningSavingsAccount spaarRek, double bedragamount) {
saldo -= bedrag;
spaarRekthis.storten(bedrag)amount -= amount;
spaarRek.deposit(amount);
}
 
public double geefSaldogetAmount() {
return saldoamount;
}
 
private boolean checkNummer(String reknr){
public static double getInterest() {
int i1 = Integer.parseInt(reknr.substring(0,3));
int i2 = Integer.parseInt(reknr.substring(4,11));
int i3 = Integer.parseInt(reknr.substring(12,14));
int r = (int) ((i1 * 100000L + i2 ) % 97L);
if (r==0) r = 97;
return (r == i3);
}
public static double getInterest(){
return interest;
}
Regel 83 ⟶ 89:
 
<syntaxhighlight lang="java">
public class BankBediendeMain {
import java.util.*;
public class BankBediende {
public BankBediende() { //constructor
}
public static void main(String[] args) {
SavingsAccount savingsAccount = new SavingsAccount("1234", 2.5);
double stand;
SpaarRekening spaar CurrentAccount currentAccount = new SpaarRekeningCurrentAccount("12349876", 2.51000);
savingsAccount.deposit(100.0);
ZichtRekening zicht = new ZichtRekening("9876", 1000);
spaar currentAccount.stortendeposit(100200.0);
zicht currentAccount.stortenwithdraw(20050.0);
System.out.println("Saldo van zichtrekeningspaarrekening: " + zichtsavingsAccount.getSaldogetAmount());
zicht.afhalen(50.0);
System.out.println("Saldo van spaarrekeningzichtrekening: " + spaarcurrentAccount.getSaldogetAmount());
}
System.out.println("Saldo van zichtrekening: " + zicht.getSaldo());
}
}
</syntaxhighlight>
Informatie afkomstig van https://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.