Ladda ner presentationen
Presentation laddar. Vänta.
1
Polymorfism
2
Polymorfa variabler class Person {} Tillåtet, eftersom alla Studenter och Lärare är Personer. class Teacher : Person {} class Student : Person {} … Person a = new Person(); Person b = new Student(); Person c = new Teacher(); Inte tillåtet, eftersom inte alla Personer är Studenter och Lärare. … Teacher x = new Person(); Student y = new Person();
3
Polymorfism och dynamisk bindning
Fordon FordonsStannare Stanna () StannaFordon () Bil Stanna ()
4
Metodpolymorfism Det finns två slags ”metodpolymorfism”:
Parameterpolymorfism (överbelastning) Även om operationen har samma namn, blir det en annan metod om vi har en annan argumentlista, dvs en annan signatur. Funktionspolymorfism (överskuggning) Om en operation i en subklass har samma signatur som en operation i dess basklass, kan subklassens metod överskugga superklassens metod.
5
Parameterpolymorfism
class Person { string namn; int age; void ändra(int aa) { age = aa; } void ändra(string nn) { namn = nn; void ändra(string nn, int aa) {
6
Överskuggning (funktionspolymorfism)
Ibland omdefinieras operationer Samma operation (med samma namn) finns då hos både subklassen och superklassen, men med olika metoder (annan kod som skall utföras) Kallas i programmeringen för ” överskuggning” Cykel märke modell beräknaLivslängdKvar() Växelcykel antalVäxlar beräknadrevlivslängd() beräknaLivslängdKvar() förändrad metod
7
Polymorfism Samma meddelande kan sändas till flera olika mottagare
Olika mottagare exekverar varsin sekvens av instruktioner Att det finns flera beteenden, för det som betraktas som samma tjänst, kallas polymorfism :Vykort porto() :Paket porto() :Brev porto()
8
Funktionspolymorfism
class Teacher : Person { public override void write() { // Annan kod } } class Person { public virtual void write() { // Kod } } class Student : Person { public override void write() { // Annan kod } }
9
Dynamisk bindning I ett objektorienterat program kan till namnet samma operation implementeras olika i olika specialiseringar En referens till en variabel ur en klass kan i själva verket referera till en specialisering Det fastställs inte vilken av de till namnet lika operationerna som skall anropas förrän programmet körs Detta innebär att det är lätt att förändra/utöka ett system Det är lätt att återanvända kod
10
Funktionspolymorfism
class Person { public void write() { // Kod } } Men om vi inte har gjort superklassens metod ”virtual” då? Med ”new” talar vi om att vi vill dölja den ärvda metoden men… ... Person p = new Student(); Student s = new Student(); p.write(); s.write() class Student : Person { public new void write() { // Annan kod } } Kör write från Person-klassen. Kör write från Student-klassen.
Liknande presentationer
© 2024 SlidePlayer.se Inc.
All rights reserved.