<< >>
Ооп в java
Классы
Создадим новый класс, не изменяя ничего в настройках. Мой называется Tuto.
Создадим в новом классе метод:
public class Tuto {
public void writeMessage(){
System.out.println(«Hello, SG!»);
}
}
В основном классе напишем вот такой код:
public class Tutorial {
public static void main(String[] args) {
Tuto writer = new Tuto();
}
}
Мы создали объект writer с типом Tuto и присвоили ей копию нашего второго класса. Через этот объект мы имеем доступ ко всем методам класса Tuto. Попробуем!
writer.writeMessage();
Немного усложним программу, добавив аргумент в функцию writeMessage:
public class Tuto {
public void writeMessage(String s){
System.out.println(s);
}
}
И вызовем ее — writer.writeMessage(«Hi, blogs!»);
Хоть мы работаем с объектами, но пока еще мы не видели всего кайфа ооп. Начнем!
Конструктор
При обращении к классу(Tuto writer = new Tuto();) java автоматически запускает конструктор, если находит такой. Конструктор — метод с тем-же именем, что и класс но без типа возвращаемого значения, в моем случае:
public class Tuto {
public Tuto(){
}
}
Все аргументы конструктора должны быть определены во время инициализации объекта. Создадим программку, которая говорит строку1, адресуя ее строке2:
public class Tutorial {
public static void main(String[] args) {
Tuto hello = new Tuto(«Hello»); //Объект выводит hello + то, что кинули в метод Say
Tuto hi = new Tuto(«Hi»); //Объект выводит hi + то, что кинули в метод Say
hello.say(«stopgame»); //Выводим Hello, stopgame!
hi.say(«blogs»); //Выводим Hi, blogs!
}
}
public class Tuto {
String what;
public Tuto(String s){ //в конструкторе присваиваем переменной(которая объявлена в этом классе) то, что в класс кинули.
what = s;
}
public void say(String who){ //выводим строку при вызове.
System.out.println(what+", "+who+"!");
}
}
Данная программа показывает, что не смотря на то, что обращаемся мы к одному классу, его объекты независимы друг от друга (выводят разное)
<©Linreal>
тут стоит в целом упомянуть о том, что все созданные пользователем классы относятся к ссылочным типам, а не типам значений(таких как int, double etc)
то есть, переменная
Tuto ob1 = new Tuto(«this is ob1»);
будет ссылаться на объект. Следовательно, переменная ob2
Tuto ob2 = ob1;
будет ссылаться на тот же объект, что и ob1 и при изменении одной из переменных, изменятся все остальные, ссылающиеся на тот же объект. Но!
int i1 = 2;int i2 = i1;int i1 += 3;
в этом случае значение i2 не изменится.
</©Linreal>