In continuarea exercițiului anterior, iată încă un exemplu pentru a înțelege mai bine funcționarea constructorilor in conjuncție cu extinderea claselor.
/**
* Creati fisierul TestSuperInConstructori.java si copiati codul
* Creati fisierul TestSuperInConstructori.java si copiati codul
* de mai jos.
* Ce se intampla cand incercati sa compilati ?
* Stergeti linia cu eroare. Rulati programul.
* Ce se afiseaza in consola ?
* Decomentati linia "//super();" si rulati iar. Ce se schimba?
* Inlocuiti super(); cu super("blablabla"); si rulati iar. Ce se
* schimba ?
* Ce se intampla cand incercati sa compilati ?
* Stergeti linia cu eroare. Rulati programul.
* Ce se afiseaza in consola ?
* Decomentati linia "//super();" si rulati iar. Ce se schimba?
* Inlocuiti super(); cu super("blablabla"); si rulati iar. Ce se
* schimba ?
* Ce se schimba daca inlocuiti super(); cu new Parinte(); ?
*/
public class TestSuperInConstructori {
public static void main (String [] args){
new Copil();
System.out.println("-------");
new Copil(2);
}
}
class Parinte {
Parinte(){
System.out.println("constructor Parinte()");
}
Parinte(String s){
System.out.println("constructor Parinte(" + s + ")");
}
}
class Copil extends Parinte{
Copil(){
System.out.println("constructor Copil()");
super("abc");
}
Copil(int i){
// super();
System.out.println("constructor Copil(" + i + ")");
}
}
*/
public class TestSuperInConstructori {
public static void main (String [] args){
new Copil();
System.out.println("-------");
new Copil(2);
}
}
class Parinte {
Parinte(){
System.out.println("constructor Parinte()");
}
Parinte(String s){
System.out.println("constructor Parinte(" + s + ")");
}
}
class Copil extends Parinte{
Copil(){
System.out.println("constructor Copil()");
super("abc");
}
Copil(int i){
// super();
System.out.println("constructor Copil(" + i + ")");
}
}
Hi,
RăspundețiȘtergere-La compilare, apare eroare pentru ca in clasa Copil, call-ul explicit catre constructorul Parinte (super("abc");) nu este inserat in prima linie din constructor
-Stergand linia cu eroare, programul compileaza si rezulta output-ul:
constructor Parinte()
constructor Copil()
-------
constructor Parinte()
constructor Copil(2)
-Decomentand linia "//super();", nu se schimba nimic..rezulta acelasi output
-Schimband "super();" cu "super("blablabla");", rezulta output:
constructor Parinte()
constructor Copil()
-------
constructor Parinte(blablabla)
constructor Copil(2)
(se apeleaza constructorul cu parametri din clasa Parinte..)
-Daca inlocui "super();" cu "new Parinte();", rezulta:
constructor Parinte()
constructor Copil()
-------
constructor Parinte()
constructor Parinte()
constructor Copil(2)
(deci, practic se creeaza 2 obiecte de tip Parinte)
Bye
Asa este :) de ce trebuie ca linia super() sa fie prima din constructor? (e valabil si pentru this()).
RăspundețiȘtergere