Presentation laddar. Vänta.

Presentation laddar. Vänta.

Polymorfism.

Liknande presentationer


En presentation över ämnet: "Polymorfism."— Presentationens avskrift:

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.


Ladda ner ppt "Polymorfism."

Liknande presentationer


Google-annonser