25.jan.2021. Ponavljamo > Polimorfizam
––> Polimorfizam predstavlja sposobnost promenljive da referencira
objekte različitih tipova i da automatski poziva odgovarajuću metodu
objekta koji referencira.
// Polimorfizam se zasniva na ideji da
metoda koja je deklarisana u osnovnoj klasi može da se implementira na
više različitih načina u različitim izvedenim klasama.
Polimorfizam se realizuje preko virtualnih metoda
- za deklaraciju virtuelnih metoda se koristi ključna reč virtual.
- virtualne metode se mogu reimplementirati u izvedenim klasama (kod njih se koristi ključna reč override).
.
Polimorfizam omogućava da se pozove metoda izvedene klase preko objekta osnovne klase u toku izvršavanja programa. Ovo je zgodno kada je potrebno raditi sa grupom objekata. Ako su ti objekti izvedeni iz jedne osnovne klase onda je moguće kreirati niz objekata osnovne klase, a pojedinim elementima tog niza dodeljivati konkretne objekte izvedenih klasa. Ako sve izvedene klase imaju istu metodu (funkciju), pozivanje tog metoda će biti jednostavno i uvek će se pozvati odgovarajući metod.
Kod polimorfizma se koriste ključne reči virtual i override.
virtual - koristi se kako bi se metoda osnovne klase mogla predefinisati u izvedenoj klasi.
override - koristi se u izvedenoj klasi kako bi se ta ista metoda proglasila metodom koja prepisuje virtualnu metodu iz osnovne klase.
Primer:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication
{
class Kompleksni
{
private double re;
private double im;
public Kompleksni()
{
re = 0;
im = 0;
}
public Kompleksni(double realni, double imaginarni)
{
re = realni;
im = imaginarni;
}
public override string ToString()
{
string temp;
if (im > 0)
temp = re + "+" + im + "i";
else
temp = re + "" + im + "i";
return temp;
}
}
class Program
{
static void Main(string[] args)
{
Kompleksni Z1 = new Kompleksni(4, -5);
Console.WriteLine("Z1 = {0}", Z1);
Kompleksni Z2 = new Kompleksni(2, 6);
Console.WriteLine("Z2 = {0}", Z2);
}
}
}
|
REZULTAT --> poziva se reimplementirana metoda
(pozvaće se metoda klase čijeg je tipa promenljiva)
Ukoliko ne želimo da drugi programeri, nasleđjuju neku od klasa, koje smo napravili
--> to možemo učiniti pomoću ključne reči sealed , a takve klase se nazivaju zapečaćene klase.
Zapečaćena (sealed) klasa ne može da se koristi kao bazna klasa bilo koje druge klase.
Sintaksa: