— Самое время рассказать тебе о конструкторах. Всё очень просто: программисты придумали сокращённую запись создания и инициализации объекта:
Без использования конструктора |
С использованием конструктора |
MyFile file = new MyFile();
file.initialize("c:\data\a.txt");
String text = file.readText();
|
MyFile file = new MyFile("c:\data\a.txt");
String text = file.readText();
|
MyFile file = new MyFile();
file.initialize("c:\data\", "a.txt");
String text = file.readText();
|
MyFile file = new MyFile("c:\data\", "a.txt");
String text = file.readText();
|
MyFile file = new MyFile();
file.initialize("c:\data\a.txt");
MyFile file2 = new MyFile();
file2.initialize(file, "a.txt");
String text = file2.readText();
|
MyFile file = new MyFile("c:\data\a.txt");
MyFile file2 = new MyFile(file, "a.txt");
String text = file2.readText();
|
— А я только с initialize закончил разбираться…
— А ты внимательнее посмотри. Использование конструкторов удобнее и компактнее.
— Так компактнее, да. Но есть вопрос: как написать в классе метод initialize я знаю, а как внутри класса написать конструктор?
— Посмотри сначала на небольшой пример:
Без использования конструктора |
С использованием конструктора |
class MyFile
{
private String filename = null;
public void initialize(String name)
{
this.filename = name;
}
public void initialize(String folder, String name)
{
this.filename = folder + name;
}
public void initialize(MyFile file, String name)
{
this.filename = file.getFolder() + name;
}
…
}
|
class MyFile
{
private String filename = null;
public MyFile(String name)
{
this.filename = name;
}
public MyFile(String folder, String name)
{
this.filename = folder + name;
}
public MyFile(MyFile file, String name)
{
this.filename = file.getFolder() + name;
}
…
}
|
— Объявить конструктор в классе очень легко. Конструктор — это тот же метод initialize, но с двумя отличиями:
а) Имя метода-конструктора совпадает с именем класса (вместо initialize).
б) У метода-конструктора нет типа (никакой тип не указывается вообще).
— Фактически тот же метод initialize, но с небольшими отличиями. Вроде понятно.