class Person {
String name;
int age;
Person(String inputName, int inputAge) {
name = inputName;
age = inputAge;
}
}
class Person {
String name;
int age;
Person(String inputName, int inputAge) {
name = inputName;
age = inputAge;
}
}
Co když:
name
, age
po vytvoření objektuname
, age
po vytvoření objektu?
⇒ použijeme klíčové slovo private
public
public class Person {
private String name;
private int age;
public Person(String inputName, int inputAge) {
name = inputName;
age = inputAge;
}
}
public
= veřejný, může používat každý i mimo balík
⇒ používejte na třídy a (některé) metodyprivate
= soukromý, nemůže používat nikdo mimo třídy
⇒ používejte na atributyprotected
= chráněný
⇒ používá se při dědičnosti, vysvětlíme pozdějimodifikátor neuveden, pak jde o možnost přístupu "package local"
public
, mimo něj jako private
public
a private
.get
& set
— motivacepublic class Person {
private String name;
private int age;
public Person(String inputName, int inputAge) {
name = inputName;
age = inputAge;
}
}
Klíčové slovo public
umožňuje použít třídu Person
všude
Person p = new Person("Marek", 23); // even from another class/package
private
zabraňuje získat hodnotu atributů p.name
, p.age
.get
public int getAge() {
return age;
}
get
+ jméno atributu s velkým písmenem (getAge
, getName
, …).set
public void setAge(int updatedAge) {
age = updatedAge;
}
void
(nevrací nic).set
+ jméno atributu s velkým písmenem (setAge
, setName
, …).get
& set
public class Person {
private String name; // attribute
public String getName() { // its getter
return name;
}
public void setName(String newName) { // its setter
name = newName;
}
}
public
, namísto vytváření metod get
a set
?set
Chci nastavit atribut věk (v třídě Person
) pouze na kladné číslo? ⇒ Řešení: upravím metodu set
:
if (updatedAge > 0) age = updatedAge;
get
/set
this
public void setAge(int updatedAge) {
age = updatedAge;
}
updatedAge
za age
?this
:public void setAge(int age) {
this.age = age;
}
this
určuje, že jde o atribut objektu, nikoli parametr (lokální proměnnou)public class Person {
private String name;
public Person(String name) {
this.name = name;
}
public void writeInfo() {
System.out.println("Person " + name);
}
public String getName() {
return this.name;
}
}
Person
.public class Demo {
public static void main(String[] args) {
Person ales = new Person("Ales");
Person beata = new Person("Beata");
ales.writeInfo();
beata.writeInfo();
String alesName = ales.getName(); // getter is used
// String alesName = ales.name; // forbidden
}
}
Account
— připomenutípublic class Account {
private double balance;
public void add(double amount) {
balance += amount;
}
public void writeBalance() {
System.out.println(balance);
}
public void transferTo(Account whereTo, double amount) {
balance -= amount; // change the balance
whereTo.add(amount);
}
}
Account
— řešenípublic void transferTo(Account whereTo, double amount) {
this.add(-amount);
whereTo.add(amount);
}
/