-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathClassesDemo.java
More file actions
146 lines (127 loc) · 5.24 KB
/
Copy pathClassesDemo.java
File metadata and controls
146 lines (127 loc) · 5.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
import java.*;
class Politician {
private String name, surname, party;
public static boolean steal = true;
/*
* static - legat de clasa, de general
* non-static - legat de obiect, de particular - got the idea?
*/
/*
* blocurile statice se executa doar o odata, doar la prima instantiere a clasei
*/
static {
System.out.println("PSD rullz");
}
/*
* blocurile non-statice se executa la fiecare instantiere a clasei
*/
{
System.out.println("Salve Dragnea");
}
public Politician (String name, String nume_familie, String party) {
this.name = name;
/*
* folosim this pentru ca avem conflict de nume si in asa mod
* prin this facem referire in mod explicit la obiectul care reprezinta
* instanta clasei Politician
* fara this, am avea name = name, care nu face nimic, ambele facand
* referire la parametrul dat constructorului clasei
*/
surname = nume_familie;
/* nu avem conflict de nume => nu e musai sa
* folosim this pentru a face referire la obiect
* putem sa folosim this in acest caz, insa nu e obligatoriu
* ca sa o faceti pe proasta aia de profa fericita, in acest caz
* nu folositi deloc this, ca taie ca vaca, chiar daca e corect
*/
this.party = party;
}
public Politician (String name, String surname) {
this(name, surname, "Independent");
/*
prin acest mod supraincarcam constructorul clasei (e si ea o metoda)
si prin this-ul de aici apelam constructorul cu 3 parametri in
acest constructor cu 2 parametri, bagand ca al treilea parametru
o valoare (sa zicem ca e default)
*/
}
@Override
public String toString () {
/*
prin aceasta metoda (mai bine zis, prin supradefinirea ei, ea fiind
parte din clasa Object, mostenita de toate clasele din Java),
putem realiza o afisare de informatii despre obiectul care e instanta
acestei clase
astfel, apeland System.out.println(obj), se va afisa de fapt obj.toString
(poti sa apelezi si System.out.println(obj.toString()), insa e acelasi
lucru)
*/
if (party.equals("Independent") || party.equals("USR"))
return name + " " + surname + " este un politician ok-ish";
else
return name + " " + surname + " din " + party + " ia la pula";
}
// getteri si setteri -> modalitate de a accesa membri privati din clasa
// aka ii infasori in metode publice pentru a ii accesa din afara clasei
// vezi principii POO
public void setParty(String party) {
this.party = party;
}
public String getParty() {
return party; // se poate si this, insa la proasta de profa nu faceti asta
}
public void setName(String name) {
this.name = name; // conflict de nume -> this - got the idea?
}
public String getName() {
return name;
}
public void setSurname(String surname) {
this.surname = surname;
}
public String getSurname() {
return surname;
}
public void doStuff() {
// smth
doStaticStuff1();
// putem apela metode statice in metode nonstatice
System.out.println(steal); // si sa folosim campuri statice in metode non-statice (general -> particular)
}
public static void doStaticStuff1() {
//...
}
public static void doStaticStuff2() {
// doStuff();
// nu putem apela metode non statice in metode statice, doar statice in statice - sesizati? (cu limba in obraz)
doStaticStuff1();
// System.out.println(this.name);
// ... si nici sa folosim membri non - statici in metode statice (nu prea are logica sa folosesti ce tine de obiect
// in ce tine de clasa aka particular -> general)
}
}
public class ClassesDemo {
public static void main (String[] args) {
Politician pol1 = new Politician("Liviu", "Dragnea", "PSD");
Politician pol2 = new Politician("Viorica", "Dancila", "PSD");
Politician pol3 = new Politician("Calin", "Popescu-Tariceanu", "ALDE");
Politician pol4 = new Politician("Ioan Cezar", "Coraci"); // stiu ca era la PNL, dar bag si eu asa
// afisam informatii despre obiectele de mai sus
System.out.println(pol1);
System.out.println(pol2);
System.out.println(pol3);
System.out.println(pol4);
// afisam info despre clasa
System.out.println("Sunt toti politicienii hoti? Fals sau adevarat: " + Politician.steal);
// putem accesa si asa - obj.cevaStatic, insa nu e recomandat, caci static tine de clasa
System.out.println(pol1.steal);
System.out.println(pol2.steal);
System.out.println(pol3.steal);
System.out.println(pol4.steal);
// acum schimbam valoarea campului static steal din clasa
Politician.steal = false;
System.out.println("Si acum e vreun politician hot? Fals sau adevarat: " + Politician.steal);
// putem accesa si asa - obj.cevaStatic, insa nu e recomandat, caci static tine de clasa
System.out.println(pol1.steal);
}
}