+ All Categories
Home > Documents > DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige...

DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige...

Date post: 27-Apr-2020
Category:
Upload: others
View: 6 times
Download: 0 times
Share this document with a friend
166
University of Southern Denmark • Syddansk Universitet DM503 Forelæsning 10 Thursday, December 16, 2010
Transcript
Page 1: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

DM503Forelæsning 10

Thursday, December 16, 2010

Page 2: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Indhold• Abstrakte klasser og metoder• Nedarvningsdetaljer

• Polymorfisme• Design med nedarvning for øje• Generics

Thursday, December 16, 2010

Page 3: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Abstrakte klasser

Thursday, December 16, 2010

Page 4: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Abstrakte klasser• En abstrakt klasse

Thursday, December 16, 2010

Page 5: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Abstrakte klasser• En abstrakt klasse

• En almindelige klasse erklæret med abstract nøgleordetpublic abstract class MyClass {...}

Thursday, December 16, 2010

Page 6: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Abstrakte klasser• En abstrakt klasse

• En almindelige klasse erklæret med abstract nøgleordetpublic abstract class MyClass {...}

• Der kan ikke laves instanser af klassen

Thursday, December 16, 2010

Page 7: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Abstrakte klasser• En abstrakt klasse

• En almindelige klasse erklæret med abstract nøgleordetpublic abstract class MyClass {...}

• Der kan ikke laves instanser af klassen• Klassen kan indeholde abstrakte metoder

Thursday, December 16, 2010

Page 8: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Abstrakte klasser• En abstrakt klasse

• En almindelige klasse erklæret med abstract nøgleordetpublic abstract class MyClass {...}

• Der kan ikke laves instanser af klassen• Klassen kan indeholde abstrakte metoder

• En abstrakt metode

Thursday, December 16, 2010

Page 9: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Abstrakte klasser• En abstrakt klasse

• En almindelige klasse erklæret med abstract nøgleordetpublic abstract class MyClass {...}

• Der kan ikke laves instanser af klassen• Klassen kan indeholde abstrakte metoder

• En abstrakt metode• En metode erklæret med abstract nøgleordet

Thursday, December 16, 2010

Page 10: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Abstrakte klasser• En abstrakt klasse

• En almindelige klasse erklæret med abstract nøgleordetpublic abstract class MyClass {...}

• Der kan ikke laves instanser af klassen• Klassen kan indeholde abstrakte metoder

• En abstrakt metode• En metode erklæret med abstract nøgleordet• Erklæret uden implementering

(uden tuborgklammer, med semicolon)public abstract void myfunc(...);

Thursday, December 16, 2010

Page 11: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Abstrakte klasser• En abstrakt klasse

• En almindelige klasse erklæret med abstract nøgleordetpublic abstract class MyClass {...}

• Der kan ikke laves instanser af klassen• Klassen kan indeholde abstrakte metoder

• En abstrakt metode• En metode erklæret med abstract nøgleordet• Erklæret uden implementering

(uden tuborgklammer, med semicolon)public abstract void myfunc(...);

• Hvis en klasse indeholder en abstrakt metode skal klassen også være abstrakt

Thursday, December 16, 2010

Page 12: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Abstrakte klasser• En abstrakt klasse

• En almindelige klasse erklæret med abstract nøgleordetpublic abstract class MyClass {...}

• Der kan ikke laves instanser af klassen• Klassen kan indeholde abstrakte metoder

• En abstrakt metode• En metode erklæret med abstract nøgleordet• Erklæret uden implementering

(uden tuborgklammer, med semicolon)public abstract void myfunc(...);

• Hvis en klasse indeholder en abstrakt metode skal klassen også være abstrakt• (Det omvendte behøver ikke være tilfældet)

Thursday, December 16, 2010

Page 13: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Abstrakte klasser

Thursday, December 16, 2010

Page 14: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Abstrakte klasser• Hvad kan vi nu bruge det til?!?

Thursday, December 16, 2010

Page 15: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Abstrakte klasser• Hvad kan vi nu bruge det til?!?• Minder lidt om et interface

Thursday, December 16, 2010

Page 16: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Abstrakte klasser• Hvad kan vi nu bruge det til?!?• Minder lidt om et interface

• Kan dog indeholde ikke abstrakte metoder(altså metoder med en implementering)

Thursday, December 16, 2010

Page 17: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Abstrakte klasser• Hvad kan vi nu bruge det til?!?• Minder lidt om et interface

• Kan dog indeholde ikke abstrakte metoder(altså metoder med en implementering)

• Kan indeholde variable som ikke er konstanter

Thursday, December 16, 2010

Page 18: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Abstrakte klasser• Hvad kan vi nu bruge det til?!?• Minder lidt om et interface

• Kan dog indeholde ikke abstrakte metoder(altså metoder med en implementering)

• Kan indeholde variable som ikke er konstanter• Tænk på en klasse der ikke er helt færdig

Thursday, December 16, 2010

Page 19: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Abstrakte klasser• Hvad kan vi nu bruge det til?!?• Minder lidt om et interface

• Kan dog indeholde ikke abstrakte metoder(altså metoder med en implementering)

• Kan indeholde variable som ikke er konstanter• Tænk på en klasse der ikke er helt færdig

• Kan indeholde noget

Thursday, December 16, 2010

Page 20: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Abstrakte klasser• Hvad kan vi nu bruge det til?!?• Minder lidt om et interface

• Kan dog indeholde ikke abstrakte metoder(altså metoder med en implementering)

• Kan indeholde variable som ikke er konstanter• Tænk på en klasse der ikke er helt færdig

• Kan indeholde noget• Men mangler andet

Thursday, December 16, 2010

Page 21: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Abstrakte klasser• Hvad kan vi nu bruge det til?!?• Minder lidt om et interface

• Kan dog indeholde ikke abstrakte metoder(altså metoder med en implementering)

• Kan indeholde variable som ikke er konstanter• Tænk på en klasse der ikke er helt færdig

• Kan indeholde noget• Men mangler andet• Klasser der nedarver fra en abstrakt klasse kan så

udfylde manglerne

Thursday, December 16, 2010

Page 22: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Abstrakte klasser• Hvad kan vi nu bruge det til?!?• Minder lidt om et interface

• Kan dog indeholde ikke abstrakte metoder(altså metoder med en implementering)

• Kan indeholde variable som ikke er konstanter• Tænk på en klasse der ikke er helt færdig

• Kan indeholde noget• Men mangler andet• Klasser der nedarver fra en abstrakt klasse kan så

udfylde manglerne• Oftest et abstrakt koncept (deraf navnet)

Thursday, December 16, 2010

Page 23: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Abstrakte klasser• Hvad kan vi nu bruge det til?!?• Minder lidt om et interface

• Kan dog indeholde ikke abstrakte metoder(altså metoder med en implementering)

• Kan indeholde variable som ikke er konstanter• Tænk på en klasse der ikke er helt færdig

• Kan indeholde noget• Men mangler andet• Klasser der nedarver fra en abstrakt klasse kan så

udfylde manglerne• Oftest et abstrakt koncept (deraf navnet)

• Eksempel...

Thursday, December 16, 2010

Page 24: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

public abstract class Shape {! int x, y;

! public void setPosition(int x, int y) {! ! this.x = x;! ! this.y = y;! }

! public abstract void draw();

! public abstract void resize(int size);}

Abstrakte klasser

Thursday, December 16, 2010

Page 25: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

public class Circle extends Shape {! int diameter;

! public Circle(int diameter) {! ! this.diameter = diameter;! ! setPosition(0, 0);! }

! public void draw() {! ! // Do some drawing! }

! public void resize(int size) {! ! diameter = size;! ! draw();! }}

Abstrakte klasser

Thursday, December 16, 2010

Page 26: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

public class Square extends Shape {! int side;

! public Square(int side) {! ! this.side = side;! ! setPosition(0, 0);! }

! public void draw() {! ! // Do some drawing! }

! public void resize(int size) {! ! side = size;! ! draw();! }}

Abstrakte klasser

Thursday, December 16, 2010

Page 27: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Abstrakte klasser• Abstrakte klasser (og metoder)

• Mulighed for at angive delvist koncept• Kan udvides (læs: nedarves) til flere konkrete koncepter• Samler al den fælles funktionalitet i en fælles klasse

(kodegenbrug)

Thursday, December 16, 2010

Page 28: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Nedarvningsdetaljer

Thursday, December 16, 2010

Page 29: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Nedarvningsdetaljer• Det er muligt at undersøge om et objekt er en instans af

en given klasse

Thursday, December 16, 2010

Page 30: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Nedarvningsdetaljer• Det er muligt at undersøge om et objekt er en instans af

en given klasse• obj instanseof Class

Thursday, December 16, 2010

Page 31: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Nedarvningsdetaljer• Det er muligt at undersøge om et objekt er en instans af

en given klasse• obj instanseof Class

• true hvis obj er en instans af klassen Class

Thursday, December 16, 2010

Page 32: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Nedarvningsdetaljer• Det er muligt at undersøge om et objekt er en instans af

en given klasse• obj instanseof Class

• true hvis obj er en instans af klassen Class• true hvis obj er en instans af en underklasse til Class

Thursday, December 16, 2010

Page 33: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Nedarvningsdetaljer• Det er muligt at undersøge om et objekt er en instans af

en given klasse• obj instanseof Class

• true hvis obj er en instans af klassen Class• true hvis obj er en instans af en underklasse til Class• false ellers

Thursday, December 16, 2010

Page 34: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Nedarvningsdetaljer• Det er muligt at undersøge om et objekt er en instans af

en given klasse• obj instanseof Class

• true hvis obj er en instans af klassen Class• true hvis obj er en instans af en underklasse til Class• false ellers

• Eksempel...

Thursday, December 16, 2010

Page 35: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

public class Car {// En bil

}

Nedarvningsdetaljer

Thursday, December 16, 2010

Page 36: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

public class Car {// En bil

}

Nedarvningsdetaljer

public class Audi extends Car {// En Audi

}

Thursday, December 16, 2010

Page 37: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

public class Car {// En bil

}

Nedarvningsdetaljer

public class Audi extends Car {// En Audi

}

public class Skoda extends Car {// En Skoda

}

Thursday, December 16, 2010

Page 38: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

public class Car {// En bil

}

Nedarvningsdetaljer

public class Audi extends Car {// En Audi

}

public class Skoda extends Car {// En Skoda

}

public class Main {! public static void main(String[] args) {! ! Audi bil1 = new Audi();! ! Skoda bil2 = new Skoda();

! ! checkType(bil1);! }

Thursday, December 16, 2010

Page 39: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

public class Car {// En bil

}

Nedarvningsdetaljer

public class Audi extends Car {// En Audi

}

public class Skoda extends Car {// En Skoda

}

public class Main {! public static void main(String[] args) {! ! Audi bil1 = new Audi();! ! Skoda bil2 = new Skoda();

! ! checkType(bil1);! }

! public static void checkType(Car bil) {! ! if (bil instanceof Car) {! ! ! System.out.println("bil er en Car ");! ! }! ! if (bil instanceof Audi) {! ! ! System.out.println("bil er en Audi");! ! } else if (bil instanceof Skoda) {! ! ! System.out.println("bil er en Skoda");! ! }! }}

Thursday, December 16, 2010

Page 40: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

public class Car {// En bil

}

Nedarvningsdetaljer

public class Audi extends Car {// En Audi

}

public class Skoda extends Car {// En Skoda

}

public class Main {! public static void main(String[] args) {! ! Audi bil1 = new Audi();! ! Skoda bil2 = new Skoda();

! ! checkType(bil1);! }

! public static void checkType(Car bil) {! ! if (bil instanceof Car) {! ! ! System.out.println("bil er en Car ");! ! }! ! if (bil instanceof Audi) {! ! ! System.out.println("bil er en Audi");! ! } else if (bil instanceof Skoda) {! ! ! System.out.println("bil er en Skoda");! ! }! }}

Thursday, December 16, 2010

Page 41: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

public class Car {// En bil

}

Nedarvningsdetaljer

public class Audi extends Car {// En Audi

}

public class Skoda extends Car {// En Skoda

}

public class Main {! public static void main(String[] args) {! ! Audi bil1 = new Audi();! ! Skoda bil2 = new Skoda();

! ! checkType(bil2);! }

! public static void checkType(Car bil) {! ! if (bil instanceof Car) {! ! ! System.out.println("bil er en Car ");! ! }! ! if (bil instanceof Audi) {! ! ! System.out.println("bil er en Audi");! ! } else if (bil instanceof Skoda) {! ! ! System.out.println("bil er en Skoda");! ! }! }}

Thursday, December 16, 2010

Page 42: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

public class Car {// En bil

}

Nedarvningsdetaljer

public class Audi extends Car {// En Audi

}

public class Skoda extends Car {// En Skoda

}

public class Main {! public static void main(String[] args) {! ! Audi bil1 = new Audi();! ! Skoda bil2 = new Skoda();

! ! checkType(bil2);! }

! public static void checkType(Car bil) {! ! if (bil instanceof Car) {! ! ! System.out.println("bil er en Car ");! ! }! ! if (bil instanceof Audi) {! ! ! System.out.println("bil er en Audi");! ! } else if (bil instanceof Skoda) {! ! ! System.out.println("bil er en Skoda");! ! }! }}

Thursday, December 16, 2010

Page 43: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Nedarvningsdetaljer• Forkert brug af instanceof

Thursday, December 16, 2010

Page 44: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Nedarvningsdetaljer• Forkert brug af instanceof

public class Car {! private double mileage;

! public Car() {! ! mileage = 0;! }

! public void drive(double dist) {! ! if (this instanceof Audi) {! ! ! System.out.println("An Audi is driving: " + dist);! ! } else if (this instanceof Skoda) {! ! ! System.out.println("A Skoda is driving: " + dist);! ! }! ! mileage = mileage + dist;! }}

Thursday, December 16, 2010

Page 45: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Nedarvningsdetaljer• Korrekt (og uden brug af instanceof):

Thursday, December 16, 2010

Page 46: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Nedarvningsdetaljer• Korrekt (og uden brug af instanceof):

public class Car {! private double mileage;

! public Car() {! ! mileage = 0;! }

! public void drive(double dist) {! ! mileage = mileage + dist;! }}

Thursday, December 16, 2010

Page 47: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Nedarvningsdetaljer• Korrekt (og uden brug af instanceof):

public class Car {! private double mileage;

! public Car() {! ! mileage = 0;! }

! public void drive(double dist) {! ! mileage = mileage + dist;! }}

public class Audi extends Car {! public void drive(double dist) {! ! System.out.println("An Audi is driving: " + dist);! ! super.drive(dist);! }}

Thursday, December 16, 2010

Page 48: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Nedarvningsdetaljer• Korrekt (og uden brug af instanceof):

public class Car {! private double mileage;

! public Car() {! ! mileage = 0;! }

! public void drive(double dist) {! ! mileage = mileage + dist;! }}

public class Audi extends Car {! public void drive(double dist) {! ! System.out.println("An Audi is driving: " + dist);! ! super.drive(dist);! }}

public class Skoda extends Car {! public void drive(double dist) {! ! System.out.println("A Skoda is driving: " + dist);! ! super.drive(dist);! }}

Thursday, December 16, 2010

Page 49: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Nedarvningsdetaljer

Thursday, December 16, 2010

Page 50: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Nedarvningsdetaljer• Der gik faktisk mere for sig...

Thursday, December 16, 2010

Page 51: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Nedarvningsdetaljer• Der gik faktisk mere for sig...• Var der nogen der bemærkede hvordan en Audi/Skoda

kunne bruges som en Car?

Thursday, December 16, 2010

Page 52: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Nedarvningsdetaljer• Der gik faktisk mere for sig...• Var der nogen der bemærkede hvordan en Audi/Skoda

kunne bruges som en Car?• public class Main {

! public static void main(String[] args) {! ! Audi bil1 = new Audi();

! ! Skoda bil2 = new Skoda();

! ! checkType(bil2);! }

! public static void checkType(Car bil) {...

! }}

Thursday, December 16, 2010

Page 53: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Nedarvningsdetaljer• Der gik faktisk mere for sig...• Var der nogen der bemærkede hvordan en Audi/Skoda

kunne bruges som en Car?•

• Husk at når Skoda nedarver fra Car, så er Skoda en Car!

public class Main {! public static void main(String[] args) {! ! Audi bil1 = new Audi();

! ! Skoda bil2 = new Skoda();

! ! checkType(bil2);! }

! public static void checkType(Car bil) {...

! }}

Thursday, December 16, 2010

Page 54: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Nedarvningsdetaljer• Der gik faktisk mere for sig...• Var der nogen der bemærkede hvordan en Audi/Skoda

kunne bruges som en Car?•

• Husk at når Skoda nedarver fra Car, så er Skoda en Car!•

public class Main {! public static void main(String[] args) {! ! Audi bil1 = new Audi();

! ! Skoda bil2 = new Skoda();

! ! checkType(bil2);! }

! public static void checkType(Car bil) {...

! }}

public class Main {! public static void main(String[] args) {! ! Skoda bil2 = new Skoda();! ! Car bil;! ! bil = bil2;! }}

Thursday, December 16, 2010

Page 55: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Nedarvningsdetaljer

Thursday, December 16, 2010

Page 56: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Nedarvningsdetaljer• Polymorfisme

Thursday, December 16, 2010

Page 57: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Nedarvningsdetaljer• Polymorfisme

• Konceptet at en variabel kan refererer til objekter af flere forskellige typer

Thursday, December 16, 2010

Page 58: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Nedarvningsdetaljer• Polymorfisme

• Konceptet at en variabel kan refererer til objekter af flere forskellige typer

• Polymorfisme ved nedarvning

Thursday, December 16, 2010

Page 59: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Nedarvningsdetaljer• Polymorfisme

• Konceptet at en variabel kan refererer til objekter af flere forskellige typer

• Polymorfisme ved nedarvning• Car bil;

bil = new Audi();bil = new Skoda();

Thursday, December 16, 2010

Page 60: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Nedarvningsdetaljer• Polymorfisme

• Konceptet at en variabel kan refererer til objekter af flere forskellige typer

• Polymorfisme ved nedarvning• Car bil;

bil = new Audi();bil = new Skoda();

• Polymorfisme ved brug af interfaces

Thursday, December 16, 2010

Page 61: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Nedarvningsdetaljer• Polymorfisme

• Konceptet at en variabel kan refererer til objekter af flere forskellige typer

• Polymorfisme ved nedarvning• Car bil;

bil = new Audi();bil = new Skoda();

• Polymorfisme ved brug af interfaces• Comparable c;

c = new Integer(10);c = new Double(12.3);

Thursday, December 16, 2010

Page 62: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Design med nedarvning for øje

Thursday, December 16, 2010

Page 63: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Design med nedarvning for øje• Nedarvning skal overholde et “er en”-forhold

Thursday, December 16, 2010

Page 64: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Design med nedarvning for øje• Nedarvning skal overholde et “er en”-forhold

• Underklassen skal være en mere specifik version

Thursday, December 16, 2010

Page 65: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Design med nedarvning for øje• Nedarvning skal overholde et “er en”-forhold

• Underklassen skal være en mere specifik version• Design dit klassehierarki så det øger genbrug af kode

Thursday, December 16, 2010

Page 66: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Design med nedarvning for øje• Nedarvning skal overholde et “er en”-forhold

• Underklassen skal være en mere specifik version• Design dit klassehierarki så det øger genbrug af kode

• Også potentielt fremtidigt genbrug af kode

Thursday, December 16, 2010

Page 67: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Design med nedarvning for øje• Nedarvning skal overholde et “er en”-forhold

• Underklassen skal være en mere specifik version• Design dit klassehierarki så det øger genbrug af kode

• Også potentielt fremtidigt genbrug af kode• Put ens funktionalitet i en fælles forældreklasse

Thursday, December 16, 2010

Page 68: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Design med nedarvning for øje• Nedarvning skal overholde et “er en”-forhold

• Underklassen skal være en mere specifik version• Design dit klassehierarki så det øger genbrug af kode

• Også potentielt fremtidigt genbrug af kode• Put ens funktionalitet i en fælles forældreklasse• Skub ens funktionalitet så højt i klassehierarkiet som

muligt

Thursday, December 16, 2010

Page 69: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Design med nedarvning for øje• Nedarvning skal overholde et “er en”-forhold

• Underklassen skal være en mere specifik version• Design dit klassehierarki så det øger genbrug af kode

• Også potentielt fremtidigt genbrug af kode• Put ens funktionalitet i en fælles forældreklasse• Skub ens funktionalitet så højt i klassehierarkiet som

muligt• Overskriv metoder i underklasser så det passer til klassen

Thursday, December 16, 2010

Page 70: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Design med nedarvning for øje• Nedarvning skal overholde et “er en”-forhold

• Underklassen skal være en mere specifik version• Design dit klassehierarki så det øger genbrug af kode

• Også potentielt fremtidigt genbrug af kode• Put ens funktionalitet i en fælles forældreklasse• Skub ens funktionalitet så højt i klassehierarkiet som

muligt• Overskriv metoder i underklasser så det passer til klassen• Tilføj nye variable til underklasser men overskriv (shadow)

aldrig nedarvede variable

Thursday, December 16, 2010

Page 71: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Design med nedarvning for øje• Nedarvning skal overholde et “er en”-forhold

• Underklassen skal være en mere specifik version• Design dit klassehierarki så det øger genbrug af kode

• Også potentielt fremtidigt genbrug af kode• Put ens funktionalitet i en fælles forældreklasse• Skub ens funktionalitet så højt i klassehierarkiet som

muligt• Overskriv metoder i underklasser så det passer til klassen• Tilføj nye variable til underklasser men overskriv (shadow)

aldrig nedarvede variable• Lad hver klasse håndtere sine egne variable

Thursday, December 16, 2010

Page 72: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Design med nedarvning for øje• Nedarvning skal overholde et “er en”-forhold

• Underklassen skal være en mere specifik version• Design dit klassehierarki så det øger genbrug af kode

• Også potentielt fremtidigt genbrug af kode• Put ens funktionalitet i en fælles forældreklasse• Skub ens funktionalitet så højt i klassehierarkiet som

muligt• Overskriv metoder i underklasser så det passer til klassen• Tilføj nye variable til underklasser men overskriv (shadow)

aldrig nedarvede variable• Lad hver klasse håndtere sine egne variable

• Brug super til at tilgå forældre-constructoren

Thursday, December 16, 2010

Page 73: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Design med nedarvning for øje• Nedarvning skal overholde et “er en”-forhold

• Underklassen skal være en mere specifik version• Design dit klassehierarki så det øger genbrug af kode

• Også potentielt fremtidigt genbrug af kode• Put ens funktionalitet i en fælles forældreklasse• Skub ens funktionalitet så højt i klassehierarkiet som

muligt• Overskriv metoder i underklasser så det passer til klassen• Tilføj nye variable til underklasser men overskriv (shadow)

aldrig nedarvede variable• Lad hver klasse håndtere sine egne variable

• Brug super til at tilgå forældre-constructoren• Brug super til at tilgå metoder på forældren

Thursday, December 16, 2010

Page 74: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Design med nedarvning for øje

Thursday, December 16, 2010

Page 75: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Design med nedarvning for øje• Brug interfaces hvis en klasse skal have to eller flere roller

(simuler multipel nedarvning)

Thursday, December 16, 2010

Page 76: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Design med nedarvning for øje• Brug interfaces hvis en klasse skal have to eller flere roller

(simuler multipel nedarvning)• Overskriv altid generelle metoder som toString og equals

Thursday, December 16, 2010

Page 77: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Design med nedarvning for øje• Brug interfaces hvis en klasse skal have to eller flere roller

(simuler multipel nedarvning)• Overskriv altid generelle metoder som toString og equals• Brug abstrakte klasser til at beskrive klasser længere nede i

hierarkiet

Thursday, December 16, 2010

Page 78: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Design med nedarvning for øje• Brug interfaces hvis en klasse skal have to eller flere roller

(simuler multipel nedarvning)• Overskriv altid generelle metoder som toString og equals• Brug abstrakte klasser til at beskrive klasser længere nede i

hierarkiet• Brug private, protected, public på fornuftig vis

Thursday, December 16, 2010

Page 79: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Design med nedarvning for øje• Brug interfaces hvis en klasse skal have to eller flere roller

(simuler multipel nedarvning)• Overskriv altid generelle metoder som toString og equals• Brug abstrakte klasser til at beskrive klasser længere nede i

hierarkiet• Brug private, protected, public på fornuftig vis

• Indkapsling af data

Thursday, December 16, 2010

Page 80: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Design med nedarvning for øje• Brug interfaces hvis en klasse skal have to eller flere roller

(simuler multipel nedarvning)• Overskriv altid generelle metoder som toString og equals• Brug abstrakte klasser til at beskrive klasser længere nede i

hierarkiet• Brug private, protected, public på fornuftig vis

• Indkapsling af data• Adgang for underklasser

Thursday, December 16, 2010

Page 81: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics

Thursday, December 16, 2010

Page 82: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Lad os starte med et motiverende eksempel :-)

Thursday, December 16, 2010

Page 83: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Lad os starte med et motiverende eksempel :-)• Vi vil lave en kasse som vi kan komme ting ned i og

tage ud igen

Thursday, December 16, 2010

Page 84: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Lad os starte med et motiverende eksempel :-)• Vi vil lave en kasse som vi kan komme ting ned i og

tage ud igen• Vi vil gerne have at kassen skal kun gemme hvad som

helst

Thursday, December 16, 2010

Page 85: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Lad os starte med et motiverende eksempel :-)• Vi vil lave en kasse som vi kan komme ting ned i og

tage ud igen• Vi vil gerne have at kassen skal kun gemme hvad som

helst• Hmm ... alle klasser nedarver fra Object

Thursday, December 16, 2010

Page 86: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

public class Box {! private Object object;

! public void add(Object object) {! ! this.object = object;! }

! public Object get() {! ! return object;! }}

Generics

Thursday, December 16, 2010

Page 87: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

public class Box {! private Object object;

! public void add(Object object) {! ! this.object = object;! }

! public Object get() {! ! return object;! }}

Generics

public class Main {! public static void main(String[] args) {! ! // ONLY place Integer objects into this box!! ! Box integerBox = new Box();

! ! integerBox.add(new Integer(10));! ! Integer someInteger = (Integer) integerBox.get();! ! System.out.println(someInteger);! }}

Thursday, December 16, 2010

Page 88: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

public class Box {! private Object object;

! public void add(Object object) {! ! this.object = object;! }

! public Object get() {! ! return object;! }}

Generics

public class Main {! public static void main(String[] args) {! ! // ONLY place Integer objects into this box!! ! Box integerBox = new Box();

! ! integerBox.add(new Integer(10));! ! Integer someInteger = (Integer) integerBox.get();! ! System.out.println(someInteger);! }}

Thursday, December 16, 2010

Page 89: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

public class Box {! private Object object;

! public void add(Object object) {! ! this.object = object;! }

! public Object get() {! ! return object;! }}

Generics

public class Main {! public static void main(String[] args) {! ! // ONLY place Integer objects into this box!! ! Box integerBox = new Box();

! ! // Imagine this is one part of a large application! ! integerBox.add("10"); // note how the type is now String

! ! Integer someInteger = (Integer) integerBox.get();! ! System.out.println(someInteger);! }}

Thursday, December 16, 2010

Page 90: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

public class Box {! private Object object;

! public void add(Object object) {! ! this.object = object;! }

! public Object get() {! ! return object;! }}

Generics

public class Main {! public static void main(String[] args) {! ! // ONLY place Integer objects into this box!! ! Box integerBox = new Box();

! ! // Imagine this is one part of a large application! ! integerBox.add("10"); // note how the type is now String

! ! Integer someInteger = (Integer) integerBox.get();! ! System.out.println(someInteger);! }}

Thursday, December 16, 2010

Page 91: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics

Thursday, December 16, 2010

Page 92: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Hvad er problemet?

Thursday, December 16, 2010

Page 93: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Hvad er problemet?

• Vi har lavet en mundtlig “kontrakt” som ikke bliver overholdt

Thursday, December 16, 2010

Page 94: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Hvad er problemet?

• Vi har lavet en mundtlig “kontrakt” som ikke bliver overholdt

• Java kan ikke tjekke den slags kontrakter for os

Thursday, December 16, 2010

Page 95: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Hvad er problemet?

• Vi har lavet en mundtlig “kontrakt” som ikke bliver overholdt

• Java kan ikke tjekke den slags kontrakter for os• Bemærk

Thursday, December 16, 2010

Page 96: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Hvad er problemet?

• Vi har lavet en mundtlig “kontrakt” som ikke bliver overholdt

• Java kan ikke tjekke den slags kontrakter for os• Bemærk

• Koden kompiler stadig korrekt

Thursday, December 16, 2010

Page 97: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Hvad er problemet?

• Vi har lavet en mundtlig “kontrakt” som ikke bliver overholdt

• Java kan ikke tjekke den slags kontrakter for os• Bemærk

• Koden kompiler stadig korrekt• Fejlen sker først på runtime

Thursday, December 16, 2010

Page 98: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Hvad er problemet?

• Vi har lavet en mundtlig “kontrakt” som ikke bliver overholdt

• Java kan ikke tjekke den slags kontrakter for os• Bemærk

• Koden kompiler stadig korrekt• Fejlen sker først på runtime

• Hvad gør vi så...

Thursday, December 16, 2010

Page 99: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Hvad er problemet?

• Vi har lavet en mundtlig “kontrakt” som ikke bliver overholdt

• Java kan ikke tjekke den slags kontrakter for os• Bemærk

• Koden kompiler stadig korrekt• Fejlen sker først på runtime

• Hvad gør vi så...• ... og ind kommer Generics som en redning

Thursday, December 16, 2010

Page 100: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Hvad er problemet?

• Vi har lavet en mundtlig “kontrakt” som ikke bliver overholdt

• Java kan ikke tjekke den slags kontrakter for os• Bemærk

• Koden kompiler stadig korrekt• Fejlen sker først på runtime

• Hvad gør vi så...• ... og ind kommer Generics som en redning

• En måde at angive datatyper på i Java

Thursday, December 16, 2010

Page 101: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Hvad er problemet?

• Vi har lavet en mundtlig “kontrakt” som ikke bliver overholdt

• Java kan ikke tjekke den slags kontrakter for os• Bemærk

• Koden kompiler stadig korrekt• Fejlen sker først på runtime

• Hvad gør vi så...• ... og ind kommer Generics som en redning

• En måde at angive datatyper på i Java• Typer kan også være variable i Java

Thursday, December 16, 2010

Page 102: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Hvad er problemet?

• Vi har lavet en mundtlig “kontrakt” som ikke bliver overholdt

• Java kan ikke tjekke den slags kontrakter for os• Bemærk

• Koden kompiler stadig korrekt• Fejlen sker først på runtime

• Hvad gør vi så...• ... og ind kommer Generics som en redning

• En måde at angive datatyper på i Java• Typer kan også være variable i Java

• Bedst illustreret med et eksempel...

Thursday, December 16, 2010

Page 103: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

public class Box<T> {! private T object;

! public void add(T object) {! ! this.object = object;! }

! public T get() {! ! return object;! }}

Generics

Thursday, December 16, 2010

Page 104: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

public class Box<T> {! private T object;

! public void add(T object) {! ! this.object = object;! }

! public T get() {! ! return object;! }}

Generics

Thursday, December 16, 2010

Page 105: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

public class Box<T> {! private T object;

! public void add(T object) {! ! this.object = object;! }

! public T get() {! ! return object;! }}

Generics

public class Main {! public static void main(String[] args) {! ! Box<Integer> integerBox = new Box<Integer>();

! ! integerBox.add(new Integer(10));

! ! Integer someInteger = integerBox.get(); // no cast!

! ! System.out.println(someInteger);! }}

Thursday, December 16, 2010

Page 106: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

public class Box<T> {! private T object;

! public void add(T object) {! ! this.object = object;! }

! public T get() {! ! return object;! }}

Generics

public class Main {! public static void main(String[] args) {

! ! Box<Integer> integerBox = new Box<Integer>();

! ! integerBox.add(new Integer(10));

! ! Integer someInteger = integerBox.get(); // no cast!

! ! System.out.println(someInteger);! }}

Thursday, December 16, 2010

Page 107: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

public class Box<T> {! private T object;

! public void add(T object) {! ! this.object = object;! }

! public T get() {! ! return object;! }}

Generics

public class Main {! public static void main(String[] args) {! ! Box<Integer> integerBox = new Box<Integer>();

! ! integerBox.add(new Integer(10));

! ! Integer someInteger = integerBox.get(); // no cast!

! ! System.out.println(someInteger);! }}

Thursday, December 16, 2010

Page 108: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

public class Box<T> {! private T object;

! public void add(T object) {! ! this.object = object;! }

! public T get() {! ! return object;! }}

Generics

public class Main {! public static void main(String[] args) {! ! Box<Integer> integerBox = new Box<Integer>();

! ! integerBox.add("10");

! ! Integer someInteger = integerBox.get(); // no cast!

! ! System.out.println(someInteger);! }}

Thursday, December 16, 2010

Page 109: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

public class Box<T> {! private T object;

! public void add(T object) {! ! this.object = object;! }

! public T get() {! ! return object;! }}

Generics

public class Main {! public static void main(String[] args) {! ! Box<Integer> integerBox = new Box<Integer>();

! ! integerBox.add("10");

! ! Integer someInteger = integerBox.get(); // no cast!

! ! System.out.println(someInteger);! }}

Thursday, December 16, 2010

Page 110: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

public class Box<T> {! private T object;

! public void add(T object) {! ! this.object = object;! }

! public T get() {! ! return object;! }}

Generics

public class Main {! public static void main(String[] args) {! ! Box<Integer> integerBox = new Box<Integer>();

! ! integerBox.add("10");

! ! Integer someInteger = integerBox.get(); // no cast!

! ! System.out.println(someInteger);! }}

Thursday, December 16, 2010

Page 111: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics

Thursday, December 16, 2010

Page 112: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Lidt notation

Thursday, December 16, 2010

Page 113: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Lidt notation

• Box kaldes en parametriseret type (eller generisk type)

Thursday, December 16, 2010

Page 114: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Lidt notation

• Box kaldes en parametriseret type (eller generisk type)• T kaldes en type-variabel

Thursday, December 16, 2010

Page 115: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Lidt notation

• Box kaldes en parametriseret type (eller generisk type)• T kaldes en type-variabel• <Integer> kaldes et type-argument

Thursday, December 16, 2010

Page 116: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Lidt notation

• Box kaldes en parametriseret type (eller generisk type)• T kaldes en type-variabel• <Integer> kaldes et type-argument

• Bemærk

Thursday, December 16, 2010

Page 117: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Lidt notation

• Box kaldes en parametriseret type (eller generisk type)• T kaldes en type-variabel• <Integer> kaldes et type-argument

• Bemærk• En generisk type kan have flere type-variable

Thursday, December 16, 2010

Page 118: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Lidt notation

• Box kaldes en parametriseret type (eller generisk type)• T kaldes en type-variabel• <Integer> kaldes et type-argument

• Bemærk• En generisk type kan have flere type-variable• Hver type-variabel kan kun specificeres én gang

Thursday, December 16, 2010

Page 119: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Lidt notation

• Box kaldes en parametriseret type (eller generisk type)• T kaldes en type-variabel• <Integer> kaldes et type-argument

• Bemærk• En generisk type kan have flere type-variable• Hver type-variabel kan kun specificeres én gang

• Eksempel: Box med to ting af samme type

Thursday, December 16, 2010

Page 120: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Lidt notation

• Box kaldes en parametriseret type (eller generisk type)• T kaldes en type-variabel• <Integer> kaldes et type-argument

• Bemærk• En generisk type kan have flere type-variable• Hver type-variabel kan kun specificeres én gang

• Eksempel: Box med to ting af samme type• Forkert: public class Box<T,T> {...}

Thursday, December 16, 2010

Page 121: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Lidt notation

• Box kaldes en parametriseret type (eller generisk type)• T kaldes en type-variabel• <Integer> kaldes et type-argument

• Bemærk• En generisk type kan have flere type-variable• Hver type-variabel kan kun specificeres én gang

• Eksempel: Box med to ting af samme type• Forkert: public class Box<T,T> {...}• Rigtig: public class Box<T> {...}

Thursday, December 16, 2010

Page 122: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Lidt notation

• Box kaldes en parametriseret type (eller generisk type)• T kaldes en type-variabel• <Integer> kaldes et type-argument

• Bemærk• En generisk type kan have flere type-variable• Hver type-variabel kan kun specificeres én gang

• Eksempel: Box med to ting af samme type• Forkert: public class Box<T,T> {...}• Rigtig: public class Box<T> {...}

• Eksempel: Box med to ting af forskellig type

Thursday, December 16, 2010

Page 123: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Lidt notation

• Box kaldes en parametriseret type (eller generisk type)• T kaldes en type-variabel• <Integer> kaldes et type-argument

• Bemærk• En generisk type kan have flere type-variable• Hver type-variabel kan kun specificeres én gang

• Eksempel: Box med to ting af samme type• Forkert: public class Box<T,T> {...}• Rigtig: public class Box<T> {...}

• Eksempel: Box med to ting af forskellig type• public class Box<T,U> {...}

Thursday, December 16, 2010

Page 124: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics

Thursday, December 16, 2010

Page 125: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Generiske metoder

Thursday, December 16, 2010

Page 126: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Generiske metoder

• Samme koncept bare kun for metoder

Thursday, December 16, 2010

Page 127: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Generiske metoder

• Samme koncept bare kun for metoder• Eksempel

public class Box<T> {! private T object;

! public void add(T object) {! ! this.object = object;! }

! public T get() {! ! return object;! }

! public <U> void inspect(U u) {! ! System.out.println("u: " + u); // toString på u! }}

Thursday, December 16, 2010

Page 128: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Generiske metoder

• Samme koncept bare kun for metoder• Eksempel

public class Box<T> {! private T object;

! public void add(T object) {! ! this.object = object;! }

! public T get() {! ! return object;! }

! public <U> void inspect(U u) {! ! System.out.println("u: " + u); // toString på u! }}

Thursday, December 16, 2010

Page 129: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Lidt mere realistisk eksempel

Thursday, December 16, 2010

Page 130: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Lidt mere realistisk eksempel

public class Box<T> {! private T object;

! public void add(T object) {! ! this.object = object;! }

! public T get() {! ! return object;! }

! public static <U> void fillBoxes(U u, ArrayList<Box<U>> boxes) {! ! for (Box<U> box : boxes) {! ! ! box.add(u);! ! }! }}

Thursday, December 16, 2010

Page 131: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Lidt mere realistisk eksempel

public class Box<T> {! private T object;

! public void add(T object) {! ! this.object = object;! }

! public T get() {! ! return object;! }

! public static <U> void fillBoxes(U u, ArrayList<Box<U>> boxes) {! ! for(Box<U> box : boxes) {! ! ! box.add(u);! ! }! }}

Thursday, December 16, 2010

Page 132: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Lidt mere realistisk eksempel

public class Box<T> {! private T object;

! public void add(T object) {! ! this.object = object;! }

! public T get() {! ! return object;! }

! public static <U> void fillBoxes(U u, ArrayList<Box<U>> boxes) {! ! for(Box<U> box : boxes) {! ! ! box.add(u);! ! }! }}

Thursday, December 16, 2010

Page 133: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Lidt mere realistisk eksempel

public class Box<T> {! private T object;

! public void add(T object) {! ! this.object = object;! }

! public T get() {! ! return object;! }

! public static <U> void fillBoxes(U u, ArrayList<Box<U>> boxes) {! ! for(Box<U> box : boxes) {! ! ! box.add(u);! ! }! }}

Thursday, December 16, 2010

Page 134: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Lidt mere realistisk eksempel

public class Box<T> {! private T object;

! public void add(T object) {! ! this.object = object;! }

! public T get() {! ! return object;! }

! public static <U> void fillBoxes(U u, ArrayList<Box<U>> boxes) {

! ! for(Box<U> box : boxes) {! ! ! box.add(u);! ! }! }}

Thursday, December 16, 2010

Page 135: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Lidt mere realistisk eksempel

public class Box<T> {! private T object;

! public void add(T object) {! ! this.object = object;! }

! public T get() {! ! return object;! }

! public static <U> void fillBoxes(U u, ArrayList<Box<U>> boxes) {! ! for(Box<U> box : boxes) {! ! ! box.add(u);! ! }! }}

Thursday, December 16, 2010

Page 136: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Lidt mere realistisk eksempel

public class Box<T> {! private T object;

! public void add(T object) {! ! this.object = object;! }

! public T get() {! ! return object;! }

! public static <U> void fillBoxes(U u, ArrayList<Box<U>> boxes) {! ! for(Box<U> box : boxes) {! ! ! box.add(u);! ! }! }}

public class Main {! public static void main(String[] args) {! ! ArrayList<Box<Integer>> boxes = new ArrayList<Box<Integer>>();! ! Box<Integer> b = new Box<Integer>();! ! boxes.add(b);! ! Integer i = new Integer(10);! ! Box.<Integer>fillBoxes(i, boxes);! }}

Thursday, December 16, 2010

Page 137: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Lidt mere realistisk eksempel

public class Box<T> {! private T object;

! public void add(T object) {! ! this.object = object;! }

! public T get() {! ! return object;! }

! public static <U> void fillBoxes(U u, ArrayList<Box<U>> boxes) {! ! for(Box<U> box : boxes) {! ! ! box.add(u);! ! }! }}

public class Main {! public static void main(String[] args) {! ! ArrayList<Box<Integer>> boxes = new ArrayList<Box<Integer>>();! ! Box<Integer> b = new Box<Integer>();! ! boxes.add(b);! ! Integer i = new Integer(10);! ! Box.<Integer>fillBoxes(i, boxes);! }}

Thursday, December 16, 2010

Page 138: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Lidt mere realistisk eksempel

public class Box<T> {! private T object;

! public void add(T object) {! ! this.object = object;! }

! public T get() {! ! return object;! }

! public static <U> void fillBoxes(U u, ArrayList<Box<U>> boxes) {! ! for(Box<U> box : boxes) {! ! ! box.add(u);! ! }! }}

public class Main {! public static void main(String[] args) {! ! ArrayList<Box<Integer>> boxes = new ArrayList<Box<Integer>>();! ! Box<Integer> b = new Box<Integer>();! ! boxes.add(b);! ! Integer i = new Integer(10);! ! Box.<Integer>fillBoxes(i, boxes);! }}

Thursday, December 16, 2010

Page 139: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Lidt mere realistisk eksempel

public class Box<T> {! private T object;

! public void add(T object) {! ! this.object = object;! }

! public T get() {! ! return object;! }

! public static <U> void fillBoxes(U u, ArrayList<Box<U>> boxes) {! ! for(Box<U> box : boxes) {! ! ! box.add(u);! ! }! }}

public class Main {! public static void main(String[] args) {! ! ArrayList<Box<Integer>> boxes = new ArrayList<Box<Integer>>();! ! Box<Integer> b = new Box<Integer>();! ! boxes.add(b);! ! Integer i = new Integer(10);! ! Box.<Integer>fillBoxes(i, boxes);! }}

Thursday, December 16, 2010

Page 140: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Lidt mere realistisk eksempel

public class Box<T> {! private T object;

! public void add(T object) {! ! this.object = object;! }

! public T get() {! ! return object;! }

! public static <U> void fillBoxes(U u, ArrayList<Box<U>> boxes) {! ! for(Box<U> box : boxes) {! ! ! box.add(u);! ! }! }}

public class Main {! public static void main(String[] args) {! ! ArrayList<Box<Integer>> boxes = new ArrayList<Box<Integer>>();! ! Box<Integer> b = new Box<Integer>();! ! boxes.add(b);! ! Integer i = new Integer(10);! ! Box.<Integer>fillBoxes(i, boxes);! }}

Thursday, December 16, 2010

Page 141: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Lidt mere realistisk eksempel

public class Box<T> {! private T object;

! public void add(T object) {! ! this.object = object;! }

! public T get() {! ! return object;! }

! public static <U> void fillBoxes(U u, ArrayList<Box<U>> boxes) {! ! for(Box<U> box : boxes) {! ! ! box.add(u);! ! }! }}

public class Main {! public static void main(String[] args) {! ! ArrayList<Box<Integer>> boxes = new ArrayList<Box<Integer>>();! ! Box<Integer> b = new Box<Integer>();! ! boxes.add(b);! ! Integer i = new Integer(10);! ! Box.<Integer>fillBoxes(i, boxes);! }}

Thursday, December 16, 2010

Page 142: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Lidt mere realistisk eksempel

public class Box<T> {! private T object;

! public void add(T object) {! ! this.object = object;! }

! public T get() {! ! return object;! }

! public static <U> void fillBoxes(U u, ArrayList<Box<U>> boxes) {! ! for(Box<U> box : boxes) {! ! ! box.add(u);! ! }! }}

public class Main {! public static void main(String[] args) {! ! ArrayList<Box<Integer>> boxes = new ArrayList<Box<Integer>>();! ! Box<Integer> b = new Box<Integer>();! ! boxes.add(b);! ! Integer i = new Integer(10);! ! Box.fillBoxes(i, boxes);! }}

Thursday, December 16, 2010

Page 143: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics

Thursday, December 16, 2010

Page 144: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Java kan selv se at typen U i fillBoxes skal være Integer

Thursday, December 16, 2010

Page 145: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Java kan selv se at typen U i fillBoxes skal være Integer

• Kaldes type-inferens

Thursday, December 16, 2010

Page 146: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Java kan selv se at typen U i fillBoxes skal være Integer

• Kaldes type-inferens• Bemærk

Thursday, December 16, 2010

Page 147: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Java kan selv se at typen U i fillBoxes skal være Integer

• Kaldes type-inferens• Bemærk

• T og U i har kunnet være alle typer

Thursday, December 16, 2010

Page 148: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Java kan selv se at typen U i fillBoxes skal være Integer

• Kaldes type-inferens• Bemærk

• T og U i har kunnet være alle typer• Hvad hvis vi gerne vil bruge generiske typer men kun

tillade nogle bestemte typer

Thursday, December 16, 2010

Page 149: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics

Thursday, December 16, 2010

Page 150: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Metoder (og klasser) med begrænsede generiske typer

Thursday, December 16, 2010

Page 151: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Metoder (og klasser) med begrænsede generiske typer• Eksempel

public class Box<T> {! private T object;

! public void add(T object) {! ! this.object = object;! }

! public T get() {! ! return object;! }

! public <U extends Car> void inspect(U u) {! ! System.out.println("u: " + u);! }}

Thursday, December 16, 2010

Page 152: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Metoder (og klasser) med begrænsede generiske typer• Eksempel

public class Box<T> {! private T object;

! public void add(T object) {! ! this.object = object;! }

! public T get() {! ! return object;! }

! public <U extends Car> void inspect(U u) {! ! System.out.println("u: " + u);! }}

Thursday, December 16, 2010

Page 153: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Metoder (og klasser) med begrænsede generiske typer• Eksempel

• <U extends Car>

• U kan være alle typer der er Car eller derunder i klassehierarkiet (Audi og Skoda)

public class Box<T> {! private T object;

! public void add(T object) {! ! this.object = object;! }

! public T get() {! ! return object;! }

! public <U extends Car> void inspect(U u) {! ! System.out.println("u: " + u);! }}

Thursday, December 16, 2010

Page 154: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Metoder (og klasser) med begrænsede generiske typer• Eksempel

public class Box<T> {! private T object;

! public void add(T object) {! ! this.object = object;! }

! public T get() {! ! return object;! }

! public <U extends Car> void inspect(U u) {! ! System.out.println("u: " + u);! }}

public class Main {! public static void main(String[] args) {! ! Box<Integer> b = new Box<Integer>();! ! Audi bil = new Audi();! ! b.inspect(bil);! }}

Thursday, December 16, 2010

Page 155: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Metoder (og klasser) med begrænsede generiske typer• Eksempel

public class Box<T> {! private T object;

! public void add(T object) {! ! this.object = object;! }

! public T get() {! ! return object;! }

! public <U extends Car> void inspect(U u) {! ! System.out.println("u: " + u);! }}

public class Main {! public static void main(String[] args) {! ! Box<Integer> b = new Box<Integer>();! ! Audi bil = new Audi();! ! b.inspect(bil);! }}

Thursday, December 16, 2010

Page 156: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Metoder (og klasser) med begrænsede generiske typer• Eksempel

public class Box<T> {! private T object;

! public void add(T object) {! ! this.object = object;! }

! public T get() {! ! return object;! }

! public <U extends Car> void inspect(U u) {! ! System.out.println("u: " + u);! }}

public class Main {! public static void main(String[] args) {! ! Box<Integer> b = new Box<Integer>();! ! b.inspect("This is a String");! }}

Thursday, December 16, 2010

Page 157: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• Metoder (og klasser) med begrænsede generiske typer• Eksempel

public class Box<T> {! private T object;

! public void add(T object) {! ! this.object = object;! }

! public T get() {! ! return object;! }

! public <U extends Car> void inspect(U u) {! ! System.out.println("u: " + u);! }}

public class Main {! public static void main(String[] args) {! ! Box<Integer> b = new Box<Integer>();! ! b.inspect("This is a String");! }}

Thursday, December 16, 2010

Page 158: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics

Thursday, December 16, 2010

Page 159: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• <U extends Something>

Thursday, December 16, 2010

Page 160: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• <U extends Something>

• Something kan være en klasse (fx Car)

Thursday, December 16, 2010

Page 161: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• <U extends Something>

• Something kan være en klasse (fx Car)• Something kan være et interface

Thursday, December 16, 2010

Page 162: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• <U extends Something>

• Something kan være en klasse (fx Car)• Something kan være et interface

• Betyder at U skal implementerer interfacet

Thursday, December 16, 2010

Page 163: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• <U extends Something>

• Something kan være en klasse (fx Car)• Something kan være et interface

• Betyder at U skal implementerer interfacet• Lille smule misbrug af nøgleordet extends

Thursday, December 16, 2010

Page 164: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• <U extends Something>

• Something kan være en klasse (fx Car)• Something kan være et interface

• Betyder at U skal implementerer interfacet• Lille smule misbrug af nøgleordet extends

• begrænsede generiske typer kan selvfølgelig også bruges på klasser

Thursday, December 16, 2010

Page 165: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• <U extends Something>

• Something kan være en klasse (fx Car)• Something kan være et interface

• Betyder at U skal implementerer interfacet• Lille smule misbrug af nøgleordet extends

• begrænsede generiske typer kan selvfølgelig også bruges på klasser• public class Box<T extends Car> {...}

Thursday, December 16, 2010

Page 166: DM503 - imada.sdu.dk€¦ · ersitet • En abstrakt klasse Abstrakte klasser • En almindelige klasse erklæret med abstract nøgleordet public abstract class MyClass {...} •

Uni

versi

ty o

f Sou

ther

n D

enm

ark

• Syd

dans

k U

nive

rsite

t

Generics• <U extends Something>

• Something kan være en klasse (fx Car)• Something kan være et interface

• Betyder at U skal implementerer interfacet• Lille smule misbrug af nøgleordet extends

• begrænsede generiske typer kan selvfølgelig også bruges på klasser• public class Box<T extends Car> {...}

• Hvad modellere følgende klasse (MyClass)?public class MyClass<E extends Comparable<E>> implements List<E> {...}

Thursday, December 16, 2010


Recommended