OBJEKTINIS PROGRAMAVIMAS
Java klasės atributai
Klasės atributai saugo objekto duomenis ir apibūdina jo būseną. Java kalboje jie taip pat vadinami laukais (angl. fields) arba egzemplioriaus kintamaisiais.
Kas yra klasės atributas?
Atributas deklaruojamas klasės viduje, tačiau už metodų ribų. Kiekvienas iš klasės sukurtas objektas gauna savo egzemplioriaus atributų reikšmes.
public class Knyga {
String pavadinimas = "Mažasis princas";
int puslapiuSkaicius = 96;
boolean perskaityta = false;
}Čia tik aprašyti klasės atributai. Objektas nesukurtas ir nėra println(), todėl niekas nespausdinama.
pavadinimasyraStringatributas, todėl saugo tekstą.puslapiuSkaiciusyraintatributas, todėl saugo sveikąjį skaičių.perskaitytayrabooleanatributas, todėl jo reikšmė gali būti tiktruearbafalse.- Visi atributai parašyti klasėje, tačiau už metodų ribų.
- Kiekvienas būsimas
Knygaobjektas gaus savo šių atributų reikšmes.
Atributų pasiekimas
Objekto atributas pasiekiamas taško operatoriumi: objektas.atributas.
public class Knyga {
String pavadinimas = "Mažasis princas";
int puslapiuSkaicius = 96;
public static void main(String[] args) {
Knyga knyga = new Knyga();
System.out.println(knyga.pavadinimas);
System.out.println(knyga.puslapiuSkaicius);
}
}Mažasis princas
96
- Su
new Knyga()sukuriamas konkretus knygos objektas. - Kintamasis
knygaleidžia pasiekti būtent šį objektą. knyga.pavadinimasper tašką pasiekia objekto tekstinį lauką.knyga.puslapiuSkaiciuspasiekia jo skaitinį lauką.- Abi reikšmės parodomos atskirose konsolės eilutėse.
Atributų reikšmių keitimas
Jei atributas nėra nekintamas, jam galima priskirti naują suderinamo tipo reikšmę:
public class Knyga {
String pavadinimas = "Mažasis princas";
boolean perskaityta = false;
public static void main(String[] args) {
Knyga knyga = new Knyga();
knyga.pavadinimas = "Pepė Ilgakojinė";
knyga.perskaityta = true;
System.out.println(knyga.pavadinimas);
System.out.println(knyga.perskaityta);
}
}Pepė Ilgakojinė
true
- Naujas objektas pradžioje turi pavadinimą Mažasis princas ir reikšmę
false. knyga.pavadinimas = "Pepė Ilgakojinė"seną tekstą pakeičia nauju.knyga.perskaityta = truepažymi, kad knyga jau perskaityta.println()parodo jau pakeistas, o ne pradines reikšmes.- Pakeitimai priklauso šiam konkrečiam
knygaobjektui.
Kiekvienas objektas turi savo būseną
Pagal tą pačią klasę sukurti objektai gali saugoti skirtingas atributų reikšmes:
public class Knyga {
String pavadinimas;
int puslapiuSkaicius;
public static void main(String[] args) {
Knyga pirma = new Knyga();
Knyga antra = new Knyga();
pirma.pavadinimas = "Mažasis princas";
pirma.puslapiuSkaicius = 96;
antra.pavadinimas = "Pepė Ilgakojinė";
antra.puslapiuSkaicius = 160;
System.out.println(pirma.pavadinimas + ": " + pirma.puslapiuSkaicius);
System.out.println(antra.pavadinimas + ": " + antra.puslapiuSkaicius);
}
}Mažasis princas: 96
Pepė Ilgakojinė: 160
- Pagal tą pačią
Knygaklasę sukuriami du atskiri objektai. - Pirmam objektui priskiriamas vienas pavadinimas ir
96puslapiai. - Antram objektui priskiriamas kitas pavadinimas ir
160puslapių. - Kiekvienas objektas turi savo atskiras laukų reikšmes.
- Todėl konsolėje matome dvi skirtingas knygas ir jų puslapių skaičius.
pirma ir antra yra nepriklausomi objektai.Pakeitus vienos knygos pavadinimą ar puslapių skaičių, kitos knygos duomenys nepasikeičia.
Nekintamas atributas su final
final neleidžia atributui dar kartą priskirti kitos reikšmės:
public class Knyga {
final String isbn = "978-609-01-0000-0";
public static void main(String[] args) {
Knyga knyga = new Knyga();
knyga.isbn = "978-609-01-1111-1";
}
}error: cannot assign a value to final variable isbn
- Atributas
isbnpažymėtas raktažodžiufinal. - Pradinė ISBN reikšmė jam suteikiama deklaravimo metu.
- Sukūrus objektą bandoma tam pačiam atributui priskirti kitą tekstą.
- Java neleidžia pakeisti
finalreikšmės, todėl programa nesukompiliuojama. - ISBN yra tinkamas nekintamo atributo pavyzdys, nes konkretaus knygos leidimo numeris neturėtų keistis.
Atributas ir vietinis kintamasis
public class Knyga {
String pavadinimas = "Mažasis princas"; // Klasės atributas
void skaityti() {
int skaitymoTrukme = 20; // Vietinis kintamasis
System.out.println(pavadinimas + ": " + skaitymoTrukme + " minučių");
}
public static void main(String[] args) {
Knyga knyga = new Knyga();
knyga.skaityti();
}
}Mažasis princas: 20 minučių
pavadinimasdeklaruotas klasėje už metodų ribų, todėl jis yra atributas.- Šį atributą turi konkretus
Knygaobjektas. skaitymoTrukmesukuriamas metodoskaityti()viduje, todėl jis yra vietinis kintamasis.- Vietinis kintamasis egzistuoja tik tol, kol vykdomas šis metodo iškvietimas.
- Metodas sujungia objekto atributą ir vietinę reikšmę į vieną konsolės eilutę.
| Savybė | Klasės atributas | Vietinis kintamasis |
|---|---|---|
| Deklaruojamas | Klasėje, už metodų ribų | Metodo arba kodo bloko viduje |
| Priklauso | Objekto būsenai | Konkrečiam metodo vykdymui |
| Pasiekiamas | Pagal prieigos taisykles klasės metoduose ar per objektą | Tik deklaravimo bloke |
| Numatytoji reikšmė | Suteikiama automatiškai | Prieš naudojimą reikia inicializuoti |
Atributų apsauga
Šiuose pradiniuose pavyzdžiuose atributai pasiekiami tiesiogiai. Praktinėse objektinėse programose jie dažnai žymimi private, o reikšmės valdomos per metodus. Tai vadinama

