Moştenirea în Java Moştenirea este un concept care aparţine aparţine
programării programării orientate obiect, unde toate toate clasele sunt aranjate într-o ierarhie strictă. Fiecare clasă din această ierarhie are o superclasă (clase care se află deasupra în ierarhie) şi un număr de subclase (clase care se află dedesupt în ierarhie). Prin moştenire o clasă poate fi reutilizată pentru a modela o altă clasă care este o specializare a celei dintâi. Prima clasă se numeşte clasă de bază ( sau sau superclasă sau clasă părinte părinte), iar derivată (sau subclasă). Clasel iar cea cea de-a de-a doua doua,, clasă derivată Claselee deriv derivate ate moşten moştenesc esc atribu atributel telee şi compo comporta rtamen mentu tull de la superc superclas lasele ele sale, sale, constr construct uctori oriii nu se moştenesc. Deci se poate spune că un obiect din clasa derivată este şi un obiect de tipul clasei de bază. Pe lângă atributele şi metodele pe care le moşteneşte de la clasa de bază, clasa clasa deriv derivată ată poate poate să adaug adaugee altele altele noi. noi. Pentru Pentru a specif specifica ica faptul faptul că o subcla subclasă să moşteneşte o clasă de bază, în Java se utilizează următoarea construcţie: [lista_Modificatori] [lista_Modificatori] class idClasa extends idClasaBaza { // corp_clasa; }
O clasă poate avea o singură clasă de bază. Exemplu:
class Parinte { public int a; public double b; public void f() { System.out.println(“metod System.out.println(“metodaa f”); } public void g() { System.out.println(“metod System.out.println(“metodaa g”); } } class A extends Parinte { public String c; public void h() { System.out.println(“metod System.out.println(“metodaa h”); } } În aceste condiţii următoarea secvenţă este corectă: A obA=new A(); obA.a=10; obA.b=9.9; obA.c=”Test”; obA.f();
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
obA.g(); obA.h(); Observaţii: 1. Nu pot fi accesate din clasa de bază decât membrii membrii care au modificatorii de acces de tip public sau protected .
2. O relaţie de derivare derivare poate poate fi privită privită şi ca o tip de incluziu incluziune: ne: în interiorul interiorul instanţei instanţei clasei derivate se află inclus un obiect din clasa de bază. Instanţa clasei de bază poate fi refernţiată prin cuvântul super. Spre deosebire de metode, constructorii claselor de bază nu se moştenesc în clasele derivate. Ca urmare o clasă derivată va avea proprii săi constructori. În cazul în care clasa derivată nu are declarat nici un constructor constructor în programul sursă, compilatorul va adăuga un constructor fără argumente şi care nu face nimic (acest lucru este valabil pentru orice clasă). Fiecare constructor al clasei derivate apelează un constructor al clasei de bază în mod implicit (adăugat de compliator) sau explicit prin folosirea unui apel de forma super(lista_argemente). şi supradefinirea sunt două concepte utile în programarea orientată obiect, se cunosc sub denumirea de polimorfism şi se referă la:
Supraîncarcarea
•
•
supraîncarcarea (overloading):
în cadrul unei clase pot exista metode cu acelaşi nume dar cu signaturile diferite, astfel încât la apelul funcţiei cu acel nume să se poată stabili în mod unic care dintre ele se execută. supradefinirea (overriding): o subclasă a unei clase poate rescrie o metodă a clasei părinte, prin implementarea unei metode cu acelaşi nume şi aceeaşi signatură ca ale superclasei.
O metodă supradefinită poate să: ignore complet codul metodei corespunzătoare din superclasă sau să extindă codul metodei părinte, executând înainte de codul propriu şi funcţia părinte. • •
Exemplu:
1. class A { void metoda() { System.out.println("A: System.out.println("A: metoda fara parametru"); } //supraincarcare void metoda(int arg) { System.out.println("A: System.out.println("A: metoda cu un parametru "+arg); } }
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
} } .................. B ob = new B(); ob.met ob.metod oda() a();; -> afisea afiseaza za "B: meto metoda da fara fara parame parametru tru"" 2. class B extends A { //supradefinire //supradefinire prin extensie void metoda(int i) { super.metoda(i); System.out.println("B: System.out.println("B: metoda cu un parametru "+i); } } …………. B ob = new B(); ob.metoda(5); -> afiseaza : A: metoda cu un parametru 5 B: metoda cu un parametru 5 Polimorfismul este deci o caracteristică specifică programării orientate obiect şi care este deosebit de util în crearea unor programe flexibile şi fiabile şi reprezintă proprietatea unei metode de a se adapta în funcţie de parametrii de apel şi în special în funcţie de tipul obiectului prin intermediul căruia este apelată.
Lucrul cu şiruri de caractere
Platforma Java pune la dispoziţia programatorilor trei clase pentru a lucra cu date alfanumerice. Acestea sunt : 1. Character – clasă ale cărei instanţe pot păstra o singură valoare caracter ; 2. String – clasă pentru lucrul cu date nemodificabile nemodificabile compuse din mai multe caractere ; 3. StringBuffer - clasă pentru manipularea datelor modificabile compuse din mai multe caractere. Toate aceste clase se găsesc în pachetul java.lang . 3.5.1. Clasa Character
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
Crearea unui obiect Character se realizează cu new: Character id_caracter=new Character('valoare');
Prezentăm în continuare câteva metode din clasa Character: int compareTo(Character);
- compară valorile păstrate de două obiecte Character. Valoarea returnată de metodă este un număr întreg indicând dacă valoarea din obiectul curent este mai mare, egală cu, sau mai mică decât valoarea ţinută de argument. Exemplu:
public class CompOb { public static void main(String args[]) { Character ob1=new Character('a'); Character ob2=new Character('v'); int diferenta=ob1.compareTo(ob2 diferenta=ob1.compareTo(ob2); ); if(diferenta==0) System.out.println("ob1 System.out.println("ob1 egal cu ob2"); else if(diferenta<0) if(diferenta<0) System.out.println("ob1 System.out.println("ob1 mai mic decat ob2"); else System.out.println("ob1 System.out.println("ob1 mai mare decat ob2"); } } boolean equals(Object);
- compară valoarea păstrată de obiectul curent cu valoarea păstrată de un altul. Metoda returnează true dacă valorile păstrate de ambele obiecte sunt egale şi false în caz contrar. Exemplu:
System.out.println("ob1 System.out.println("ob1 este "+((ob1.equals(ob2))?"egal "+((ob1.equals(ob2))?"egal cu":"diferit de")+" ob2"); String toString();
- este o metodă de instanţă care converteşte un obiect într-un şir. Şirul rezultat este de un caracter şi conţine valoarea păstrată de către obiectul Character. charValue();
- este o metodă care returneaz returneazăă valoarea valoarea păstrată de obiectul obiectul Character ca o valoare primitivă char . boolean isUpperCase(char) ; boolean isLowerCase(char);
- determină dacă valoarea primitivă char este literă mare, repectiv literă mică
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
3.5.2. Clasa String
Modul cel mai simplu de manipulare a obiectelor de tip String îl constituie constantele String , care sunt şiruri de caractere încadrate de ghilimele ("). Orice referire a unei constante de acest tip în cadrul unui program Java are ca efect crearea unui obiect String care conţine secvenţa de caractere respectivă. Exemplu:
String s = "Acesta este un sir de caractere "; Crearea unei variabile String se face la fel ca şi crearea celorlalte variabile sau folosind new. Exemple:
String sir = "Primul sir"; String s1 = "un sir"; String s2 = new String(s1); String svid = new String( ); char[ ] tab = {'s','i','r'}; String s3 = new String(tab); Când se asignează un String către o altă valoare, vechea referinţă se pierde, valoarea sa urmând a fi eliberată automat din memorie de către colectorul de gunoaie. Şirurile de caractere se pot obtine şi prin diverse prelucrări ale unor şiruri existente. În acest scop clasa String oferă un set de metode dintre care enumerăm: • • • •
String toUpperCase(); String toLowerCase(); String substring(int); String substring(int, int);
Metodele clasei String includ şi operaţii care permit consultarea stringurilor, respectiv obţinerea de informaţii cu privire la conţinutul conţinutul lor: • • • • •
int length(); char charAt(int); int indexOf(char); int indexOf(String); int lastIndexOf(char);
Obiectele de tip String nu se pot modifica după ce au fost create. Operatorul "+" concatenează două sau mai multe multe şiruri de caractere. caractere. Prin concatenare se instanţiază un nou obiect de tip String care va referenţia un şir alcătuit din şirurile
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
String sir2 =sir1+ "Java"; Operatorul "+" se asociază de la stânga la dreapta. Operatorul "+" poate avea operanzi numai şiruri sau un şir şi un operand de orice alt tip. Dacă un operand este String, atunci se converteşte şi celalalt la String, tipul rezultatului întors fiind String. Exemplu:
String sir3 = "cincizeci si cinci = " + 5 + 5; String sir4 = 5 + 5 + " = zece "; System.out.println(sir3 System.out.println(sir3 + " " + sir4); 3.5.3. Clasa StringBuffer
O altă clasă prezentă în pachetul java.lang este StringBuffer , care reprezintă tot un şir de caractere, dar spre deosebire de String , acesta acesta se poate poate modific modifica. a. În mod tipic, tipic, clasa StringBuffer se foloseşte pentru a construi date de tip caracter în mod dinamic (de exemplu atunci când se citesc date text dintr-un fişier). Crearea unui obiect din clasa StringBuffer se realizează cu new: StringBuffer id_sir=new StringBuffer(lungime); Exemplu:
String mesaj="Acesta este un sir constant"; int lungime=mesaj.length() ; StringBuffer altsir=new StringBuffer(lungime) StringBuffer(lungime) ; Prezentăm în continuare câteva metode ce pot fi folosite de obiecte de tip String şi StringBuffer . int length( );
– returnează numărul numărul de caractere conţinute în obiectul obiectul String sau StringBuffer. StringBuffer. char charAt(int index) ;
- returnează caracterul de la un indice specificat 0 1 2 3 4 5 6 7 8 9 1 0
A c e s t a charAt(0)
e s t e
1 1
1 2
1 3
u
n
1 4
1 5
t
1 6
e
1 7
s
18
t
charAt(length() 1)
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
Exemplu:
String sir="abcdef"; String altsir=sir.substrin altsir=sir.substring(2,5); g(2,5); //altsir=="cde" Alte metode pentru clasa String : int indexOf(char caracter);
– returnează poziţia în şir şir a unui caracter, căutarea se face de la începutul începutul şirului int indexOf(String); - returnează poziţia în şir a unui şir de
caractere
int lastIndexOf(char caracter) ;
- returnează poziţia în şir a unui caracter, căutarea se face de la sfârşitul şirului spre început. String toLowerCase() ;
- returnează şirul scris cu litere mici. String toUpperCase() ;
- returnază şirul scris cu litere mari. Alte metode pentru clasa StringBuffer: int capacity();
- returnează cantitatea de spaţiu alocată pentru un StringBuffer şi nu cantitatea de spaţiu folosit. StringBuffer append(char c) ;
- adaugă un caracter la sfârşitul şirului destinaţie. destinaţie. Exemplu:
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
- inserează un caracter sau şir în interiorul unui StringBuffer, index reprezintă indexul înainte de care se inserează caracterul sau şirul. StringBuffer insert(int index, String sir);
Exemplu:
StringBuffer s1=new StringBuffer("Exempl Java"); s1.insert(6,'u');System.out.p s1.insert(6,'u');System.out.println(s1); rintln(s1); s1.insert(8,"sir s1.insert(8,"sir ");System.out.println(s1 ");System.out.println(s1); ); StringBuffer setCharAt(int index, char caracter);
- înlocuieşte caracterul de la o locaţie specificată din StringBuffer cu caracterul specificat în lista de argumente; StringBuffer setLength(int nouaLung) ;
- modifică dimensiunea dimensiunea şirului. Exemplu:
StringBuffer s1=new StringBuffer(10); StringBuffer(10); s1.append("Programare"); s1.setLength(2); s1.setLength(2); // s1="Pr" Exemplu1 1.
Să se scrie un program care caută un subşir preluat din linia de comanda într-un şir dat. (Şirul este constant) import java.util.*; class Caut { public static void main(String argv[]) { if (argv.length==0) return; String sir="Acesta este un sir."; System.out.println("s1: System.out.println("s1: sirul constant: "+sir);
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
Trusted by over 1 million members
Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.
class Sirul { public static static void main(String main(String argv[]) argv[]) { if (argv.length==0) (argv.length==0) return; StringBuffer s=new StringBuffer(argv[0]); StringBuffer(argv[0]); System.out.println("Lungim System.out.println("Lungime: e: "+s.length()); "+s.length()); for (int k=0; k
Să se stabilească dacă un caracter dat (preluat din linia de comandă) aparţine sau nu unui şir. Se vor preciza şi poziţiile unde apare caracterul. import java.util.*; class CautCar { public static static void main(String main(String argv[]) argv[]) { if (argv.length==0) return; String s=new String("Acesta este sirul in care se cauta"); System.out.println(s); String s2=new String(argv[0]); for (int i=0; i