120 likes | 299 Views
Arv. Idéen i arv et at kunne genbruge gennem generalisering Når der nedarves vil såvel data som metoder ”følge” med i den nye klasse uden at disse dele skal kodes igen
E N D
Arv • Idéen i arv et at kunne genbruge gennem generalisering • Når der nedarves vil såvel data som metoder ”følge” med i den nye klasse uden at disse dele skal kodes igen • Da objekter ”fødes” som en bestemt klasse og kan ikke ændre klasse. Klassen skal selv have en constructor til initiering, der dog kan udnytte constructoren for den nedarvede base klasse.
Polymorfi • Idéen i polymorfi er, at man kan anvende et objekt, der er baseret på arv på et højere abstaktionsniveau (baseret på den overordnede klasse) og alligevel lade det være metoder implementeret på den konkrete klasse der bliver udført. • Behandles en samling objekter med samme metode, kan disse altså give forskellige udførsel afhængig af hvilke klasser de konkret er baseret på. • Metoder af denne type kaldes ofte virtuelle metoder.
Eksempler på strukturer med arv Det er ikke altid nemt med arve-hirakier Som det ses her kan figurer opdeles i 2-d og 3-d, men hvor skal et punkt nu placeres, idet det jo både kan optræde i forbindelse med 1-d, 2-d og 3-d…. Et andet eksempel er her at der er flere felter knyttet til en elipse end der er behov for til en cirkel (2 punkter og en radius eller 2 radiuser). Det kunne derfor være fristende at lade elpise være en specialisering af en cirkel, men det er ikke matematisk korrekt, idet cirklen her er en speciel elipse. Samme problem vil være omkring et rektangel og et kvadrat. Her kan interfaces være en løsning i stedet.
Eksempler på strukturer med arv Opgave Følgende laves i et consolapplikation projekt. Implementer Kæledyr: • Klassens 3 felter • Constructor til initiering af de 3 felter • Hentalder som en virtual metode, der returner alderen • Fældhår metode der udskriver at hår fældes på consollen • SigNoget som en abstrakt metode • ToString, der returnerer tekst med klassens felter Implementer Kat som nedarver fra Kæledyr: • Constructor til initiering af de 3 felter, ved brug af baseklassens constructor • SigNoget metoder der udskriver Miav på consollen Implementer Hund som nedarver fra Kæledyr: • Klassens ”ekstra” felter • Constructor til initiering af klassens 4 felter, ved brug af baseklassens constructor • Hentalder som returnerer alderen ganget med 7 • SigNoget metoder der udskriver Wow på consollen • ToString, der returnerer tekst med klassens felter I program-klassens Main metode afprøves klasserne. Lav en List<Kæledyr> og tilføj nogle hunde og nogle katte. Lav herefter et gennemløb med foreach og prøv mesom kæledyr. Lav herefter et nyt gennemløb hvor du tester om det er en hund eller kat med is-operatoren og brug as-operatoren eller typecast til hunde-klassen eller katte-klassen for at kunne bruge dennes specielle metoder.