Documente Academic
Documente Profesional
Documente Cultură
Polimorfism. Supraîncărcarea, Suprascrierea Metodelor
Polimorfism. Supraîncărcarea, Suprascrierea Metodelor
Supraîncărcarea și suprascrierea
metodelor.
profesor Dobrovolischii Olga
Programarea Orientată pe Obiecte
obiect
clasă
moștenire
polimorfism
abstractizare
încapsulare
Supradefinirea(suprascrierea, redefinirea,overriding) metodelor
Definiție: Atunci cînd o clasă rescrie o metodă a clasei părinte prin implementarea unei
metode cu același nume și cu aceeași sintaxă cu cea a superclasei are loc suprascrierea
metodei.
De exemplu:
public class vehicul{
void run(){
System.out.println(“Vehiculul merge!”);
}}
class Bicicleta extends Vehicul{
void run(){
System.out.println(“Bicicleta merge”);}}
Rețineți:
Numai metodele moștenite pot fi supradefinite
Metodele supradefinite trebuie să conțină același nume, aceeași listă de parametri și
același tip de return altfel nu merge vorba de suprascriere.
Metodele de tip final , static și constructorii nu pot fi supradefiniți.
O metodă supradefinită nu trebuie să conțină un modificator de acces mai restrictivă decît
metoda originală din clasa părinte:
Met.originala
implicit
implicit protected
public
protected protected
public
public public
public class B extends A {
void myMethod() {
System.out.println("Iarna");}
public static void main(String args[]) {
public class A { A obj = new B();
obj.myMethod();
}}
void myMethod() {
System.out.println("Examen");
public class B extends A {
protected void myMethod() {
}} System.out.println("Iarna");}
public static void main(String args[]) {
A obj = new B();
obj.myMethod();
}}
}}
În cazul în care metoda din clasa părinte are specificatorul static declarat înaintea metodei
atunci spunem că metoda din clasa părinte ascunde metoda suprascrisă din clasa derivată.
5. Faptul că folosim într-o clasă o metodă cu aceeași sintaxă ca în clasa părinte aplică
principiul moștenirii, iar faptul că în subclasă metoda clasei părinte are o implementare
diferită aplică principiul polimorfismului. Deviza polimorfismului”aceeași metodă,
implementare diferită”.
Exemplu de suprascriere a metodei toString() a clasei Object în clasa Elev
class Elev {
private String nume, prenume;
int virsta;
public Elev(String nume, String prenume, int virsta) {
this.nume = nume;
this.prenume = prenume;
this.virsta = virsta;
@Override
public String toString() {
return "Elev [nume=" + nume + ", prenume=" + prenume + ", virsta=" + virsta + "]";
public class SElev {
}public static void main(String[] args) {
Elev e1 = new Elev("Creanga", "Ion", 50);
System.out.println(e1);}}
Supraîncărcarea(overloading) metodelor
Definiție: Atunci cînd într-o clasă există metode cu același nume dar cu sintaxă diferită
spunem că metoda este supraîncărcată. Procesul de creare a acestui tip de metode se
numește supraîncărcare(Același nume, dar parametri și posibil tip de return diferit).
Metodele supraîncărcate:
Metodele supraîncărcate apar în aceeași clasă sau subclasă, au același nume dar lista de
parametri diferită
Dacă vom supraîncărca metode cu aceeași listă de parametri , dar tip de return diferit vom
obține eroare de compilare, aceasta nu oferă suficientă informație compilatorului pentru a face
diferența.
Polimorfismul determinat în timpul compilării unei aplicații este cunoscut ca polimorfism static.
Tehnica metodelor supraîncărcate este un exemplu de astfel de polimorfism. Anume la etapa
de compilare, compilatorul este capabil să facă diferența între diferite contexte și să realizeze
implementarea corectă fiecărui context de utilizare a metodei.
Atunci cînd are loc supraîncărcarea constructorilor , anume la faza de compilare compilatorul
este în stare să asocieze obiectului anume acel constructor al clasei ce are același număr de
parametri ca și constructorul apelat pentru obiectul dat. La fel este și în cazul metodelor. În
timpul compilării, compilatorul în dependență de numărul real de argumente și a tipurilor de
argumente va executa metoda supraîncărcată relevantă.
Polimorfismul dinamic(run time)
Exemplu:
class Parinte{
public void oMetoda(){
System.out.println(“Metoda parinte”);
class Copil extends Parinte{
public void oMetoda(){
System.out.println(“Metoda copil”);
public static void main(String args[]){
Parinte obj = new Copil();
obj.oMetoda();}}
Exerciții
Se consideră următoarele clase: