capitol 4

19
08/30/22 Curs 5 1 Programare Orientata Obiect Curs 5 Mostenirea / Extinderea Claselor

Upload: roxana-aliman

Post on 31-Jan-2016

212 views

Category:

Documents


0 download

DESCRIPTION

das

TRANSCRIPT

Page 1: capitol 4

04/22/23 Curs 5 1

Programare Orientata Obiect

Curs 5Mostenirea / Extinderea Claselor

Page 2: capitol 4

04/22/23 Curs 5 2

Continutul cursului1. Introducere2. Platforma Java, Clase si Obiecte3. Modificatori, Constructori4. Pachete. Incapsularea datelor5. Mostenirea / Extinderea claselor

Page 3: capitol 4

04/22/23 Curs 5 3

Curs 5

1. Mostenirea / Extinderea claselor1.1 Definitii. Aspecte generale1.2 Declararea subclaselor1.3 Ierarhia de clase1.4 Metode si proprietati in subclase1.5 Constructori in subclase1.6 Suprascriere si supraincarcare (Overriding si overloading)1.7 Polimorfism

Page 4: capitol 4

C5. Mostenirea claselor1.1 Definitii. Aspecte generale

– Mostenire (en. Inheritance): – permite construirea de noi clase folosind

clasele existente– permite reutilizarea proprietatilor si metodelor

din clasele existente– Permite adaugarea de noi proprietati si

metode pentru a extinde functionalitatea claselor existente

– Subclasa (clasa copil, clasa derivata): o clasa care mosteneste o alta clasa

– Superclasa (clasa parinte, clasa de baza): clasa care este mostenita

Page 5: capitol 4

C5. Mostenirea claselor1.1 Definitii. Aspecte generale

– Subclasele mostenesc toate proprietatile si metodele clasei parinte

– Nu au neaparat acces la ele

– Modificatorii de acces (vezi cursul 3), public, private, protected se aplica astfel:

– In subclase doar membrii publici si protected pot fi accesati

– Membrii privati ai superclasei nu pot fi modificati

Page 6: capitol 4

C5. Mostenirea claselor1.2 Declararea subclaselor

– Extinderea unei clase se realizeaza folosind cuvantul cheie extends:

class A{...}

class B extends A {...}

// A este superclasa clasei B// B este o subclasa a clasei A

 

Page 7: capitol 4

C5. Mostenirea claselor

Superclasa:

public class Person{private String name;

public Person ( ) {name = “”;

}

public Person ( String initialName ) {

this.name = initialName;}

public String getName ( ) {return name;

}

public void setName ( String newName ) {

name = newName;}

Subclasa:

public class Student extends Person {private int studentNumber;

public Student ( ) {super( );studentNumber = 0;

}

public Student (String initialName, int initialStudentNumber) {

super(initialName);studentNumber =

initialStudentNumber;}

public int getStudentNumber ( ) {return studentNumber;

}

public void setStudentNumber (int newStudentNumber ) {

studentNumber = newStudentNumber;}

Page 8: capitol 4

1.3 Ierarhia de clase– O clasa poate extinde doar o singura clasa

– Spre deosebire de C++, Java nu permite mostenirea multipla

– Toate clasele din Java extind o clasa comuna (java.lang.Object)

– Daca nu este specificata nici o clasa care sa fie extinsa compilatorul presupune ca se mosteneste clasa Object

– Se mostenesc metode din clasa Object cum ar fi toString() si equals()

– Ierarhia de clase pentru exemplu anterior:Object

Person

Student

C5. Mostenirea claselor

Page 9: capitol 4

1.4 Metode si proprietati in subclase

– Un obiect instantiat dintr-o subclasa contine doua tipuri de proprietati si metode:

1. Proprietati/metode definite local in subclasa

2. Proprietati/metode mostenite din superclasa

Care sunt proprietatile si metodele unui obiect instantiat din clasa Student?

C5. Mostenirea claselor

Page 10: capitol 4

C5. Mostenirea claselor

Superclasa:

public class Person{private String name;

public Person ( ) {name = “”;

}

public Person ( String initialName ) {

this.name = initialName;}

public String getName ( ) {return name;

}

public void setName ( String newName ) {

name = newName;}

Subclasa:

public class Student extends Person {private int studentNumber;

public Student ( ) {super( );studentNumber = 0;

}

public Student (String initialName, int initialStudentNumber) {

super(initialName);studentNumber =

initialStudentNumber;}

public int getStudentNumber ( ) {return studentNumber;

}

public void setStudentNumber (int newStudentNumber ) {

studentNumber = newStudentNumber;}

Page 11: capitol 4

1.5 Constructori in subclase

– Constructorii nu se mostenesc– Un constructor dintr-o subclasa poate apela un

constructor al superclasei prin folosirea metodei super

– Daca nu se apeleaza un constructor din superclasa in mod explicit atunci se apeleaza constructorul fara argumente, ca prima instructiune a constructorului:

super( )

C5. Mostenirea claselor

Page 12: capitol 4

1.5 Constructori in subclase

– Atunci cand un obiect este creat, masina virtuala aloca memorie pentru toate campurile. Apoi:

1. Se apeleaza constructorul superclasei2. Se initializeaza campurile3. Se executa constructorul subclasei

– In mod similar se executa constructorul superclasei, prin parcurgerea celor trei etape. Procesul se executa recursiv pana se ajunge la clasa Object

C5. Mostenirea claselor

Page 13: capitol 4

1.5 Constructori in subclase

C5. Mostenirea claselor

Y obiectY = new Y();

Pas ce se intampla x0 y0 w

0 se initializeaza campurile 1 se apeleaza constructorul Y 2 se apeleaza constructorul X 3 se initializeaza campurile din X 4 se executa constructorul X 5 se initializeaza campurile din Y6 se executa constructorul Y

0 0 00 0 00 0 0 1 0 0 1 0 11 2 11 2 2

class Y extends X { protected int y0 = 2;

public Y() { w = y0; }}

class X { protected int x0 = 1; protected int w;

public X() { w = x0; }}

Page 14: capitol 4

1.6 Suprascriere si supraincarcare (Overriding si overloading)– Overloading: mai multe metode cu acelasi nume

dar cu liste de parametrii diferite– Intr-o subclasa putem defini metode cu acelasi nume cu

metode din supraclasa si cu parametrii diferiti

– Overriding: inlocuirea unei metode din supraclasa cu o metoda implementata in subclasa

– Lista de parametrii si tipul de data returnat trebuie sa fie exact la fel

– Daca o metoda suprascrisa este apelata printr-un obiect instantiat din subclasa, atunci se apeleaza metoda implementata in subclasa

C5. Mostenirea claselor

Page 15: capitol 4

1.6 Suprascriere si supraincarcare (Overriding si overloading)– Overriding: O metoda poate fi suprascrisa doar

daca este accesibila in subclasa– Metodele private nu pot fi suprascrise– Metodele public si protected pot fi suprascrise

C5. Mostenirea claselor

Page 16: capitol 4

1.6 Suprascriere si supraincarcare (Overriding si overloading)

C5. Mostenirea claselor

Concrete1 c1 = new Concrete1();c1.show( );Output?Base.pri()Concrete1.pro()Concrete1.pub()

package P1;

public class Base { private void pri( ) { System.out.println(“Base.pri()”); } protected void pro( ) { System.out.println(“Base.pro()”); } public void pub( ) { System.out.println(“Base.pub()”); }

public final void show( ) { pri(); pro(); pub(); }}

package P2;

import P1.Base;

public class Concrete1 extends Base { public void pri( ) { System.out.println(“Concrete1.pri()”); } public void pro( ) { System.out.println(“Concrete1.pro()”); } public void pub( ) { System.out.println(“Concrete1.pub()”); }}

Page 17: capitol 4

1.7 Polimorfism– Un obiect instantiat dintr-o clasa poate avea mai

multe forme: fie “forma” clasei, fie “forma” unei clase mostenite

– Un obiect instantiat dintr-o clasa extinsa poate fi folosit in orice situatie este folosit un obiect din supraclasa

C5. Mostenirea claselor

Object

Person

Student

Page 18: capitol 4

C5. Mostenirea claselorclass SuperShow {

public String str = “SuperStr”;

public void show( ) {System.out.println(“Super.show:” + str);

}}

class ExtendShow extends SuperShow {public String str = “ExtendedStr”;

public void show( ) {System.out.println(“Extend.show:” + str);

}

public static void main (String[] args) { ExtendShow ext = new ExtendShow( ); SuperShow sup = ext; sup.show( ); //1 ext.show( ); //2 System.out.println(“sup.str = “ + sup.str); //3 System.out.println(“ext.str = “ + ext.str); //4}

}

Output?Extend.show: ExtendStrExtend.show: ExtendStrsup.str = SuperStrext.str = ExtendStr

Page 19: capitol 4

04/22/23 Curs 4 19

Continutul cursului1. Introducere2. Platforma Java, Clase si Obiecte3. Modificatori, Constructori4. Pachete. Incapsularea datelor5. Mostenirea / Extinderea claselor6. Clase abstracte