Suprascrierea metodei toString()

Metoda toString() permite obţinerea unui String cu informaţii despre obiectul cu care este apelată.

Sintaxa:

// apelare directa
String s = numeObiect.toString();

// apelare implicita, prin intermediul unor metode precum System.out.println:
System.out.println(numeObiect);

Rezultatul:
numePachet.ClasaObiectului@659e0bfd

Toate clasele au această metodă deoarece este definită în clasa Object, clasa părinte a tuturor celorlalte clase din Java. Dar implementarea default returnează doar numele complet al clasei (inclusiv numele pachetului) şi un string ciudat (hash code), despre care veţi învăţa mai târziu, de aceea este indicat ca toate clasele cu care lucraţi să suprascrie această metodă.

public class Computer {

   String denumire;
   double frecventa;
   int ram;
   
   @Override
   public String toString() {
      return "Computer " + denumire + ", frecventa procesor: " + frecventa + "GHz, RAM: " + ram + " GB.";
   }
   
}
Acum, la afişarea obiectului de tip Computer în metoda main()
Computer computer1 = new Computer();
computer1.denumire = "Asus Intel MegaPower Deluxe";
System.out.println(computer);
vor fi afişate următoarele informaţii (atributele pe care nu le-aţi iniţializat explicit au primit valorile default):
Computer Asus Intel MegaPower Deluxe, frecventa procesor: 0.0GHz, RAM: 0 GB.

Unele clase existente în pachetele Java au deja propria implementare a metodei toString (ex: ArrayList), de aceea le puteţi folosi direct ca parametru acolo unde aveţi nevoie de o descriere de tip String.

Eclipse vă pune la dispoziţie o metodă rapidă pentru suprascrierea metodei toString: din meniul Source (sau Alt+Shift+S, sau clic dreapta în editorul de cod), alegeţi Generate toString()…, după care va fi afişată o fereastră pentru alegerea atributelor care doriţi să fie incluse (implicit sunt bifate toate).

Assignment

Creaţi o clasă Computer cu câteva atribute, apoi creaţi câteva obiecte şi adăugaţi-le într-un array şi într-un ArrayList. Afişaţi informaţiile despre computere din ambele.

Solutie

Solutie

public class Computer {

   String denumire;
   double frecventa;
   int ram;
   
   // constructor implicit
   Computer() { }
   
   // constructor cu parametri
   Computer(String denumire, double frecv, int memorie) {
      this.denumire = denumire;
      frecventa = frecv;
      ram = memorie;
   }
   
   // metoda tip setter (pentru initializare atribute)
   public void setAtributeComputer(String den, double frecv, int mem) {
      denumire = den;
      
      // faceti verificari riguroase, acestea sunt doar un exemplu
      if (frecv > 0) frecventa = frecv;
      else frecventa = 0;
      
      if (mem > 0 && mem <= 16) ram = mem;
   }
   
   @Override
   public String toString() {
      return "Computer " + denumire + ", frecventa procesor: " + frecventa + "GHz, RAM: " + ram + " GB.";
   }
   
}
public class Test {

   public static void main(String[] args) {

       Computer computer1 = new Computer();
       computer1.denumire = "Dell";
       computer1.frecventa = 2.8;
       computer1.ram = 4;
       
       Computer computer2 = new Computer("Asus", 1.9, 8);
       
       Computer computer3 = new Computer();
       computer3.setAtributeComputer("UltraPowerPC", 6.5, 16);
       
       Computer[] computerArray = new Computer[3];
       computerArray[0] = computer1;
       computerArray[1] = computer2;
       computerArray[2] = computer3;
   
       ArrayList<Computer> computerArrList = new ArrayList();
       computerArrList.add(computer1);
       computerArrList.add(computer2);
       computerArrList.add(computer3);
       
       // afisare array
       System.out.println("\nAfisam array-ul ================");
       for (Computer comp : computerArray) {
          System.out.println(comp);
       }
       
       // afisare ArrayList
       System.out.println("\nAfisam ArrayList-ul ================");
       for (int i = 0; i<computerArrList.size(); i++) {
          System.out.println(computerArrList.get(i));
       }
       
       // incercati si variantele astea:
       System.out.println("\nAfisam direct array-ul ================");
       System.out.println(computerArray);
       System.out.println("\nAfisam directArrayList-ul ================");
       System.out.println(computerArrList);
       
   }

}


You could leave a comment if you were logged in.