В объектно-ориентированном программировании конструктор - это специальная функция, которую вы вызываете для создания объекта. У конструкторов есть несколько уникальных функций, которые позволяют им работать.
В Java вы называете конструктор в честь его класса. Конструктор - это метод, определенный в классе, к которому он применяется. Конструкторы Java могут использовать перегрузку для обеспечения альтернативного поведения. Конструкторы в Java также могут использовать наследование для повторного использования кода.
Зачем вообще нужны конструкторы?
Конструкторы - это основа объектно-ориентированное программирование, и Java не исключение. В этом примере показано, как определить базовый класс Circle с одним свойством данных и одним методом:
public class Circle {
общественный двойной радиус;
общественная двойная зона () {return 3,14159 * радиус * радиус; }
}
Затем вы можете создать экземпляр этого класса и взаимодействовать с ним:
Круг c = новый Круг ();
c.radius = 2;
System.out.println (c.area ()); // 12.56636
Но это менее удобно и надежно, чем могло бы быть. Хорошая объектно-ориентированная практика - инкапсулировать данные, защищая их от несанкционированного доступа:
public class Circle {
частный двойной радиус;
общественная двойная зона () {return 3,14159 * радиус * радиус; }
public void setRadius (двойной г) {радиус = г; }
}
Теперь вызывающий код может использовать setRadius метод и не нужно беспокоиться о деталях его реализации:
Круг c = новый Круг ();
c.setRadius (2);
Конструкторы предлагают еще лучший способ предоставления данных объекту при его создании. Они очень часто используются для инициализации свойств, таких как радиус здесь.
Примеры простых конструкторов
Самый простой конструктор - это конструктор без аргументов, который ничего не делает:
public class Circle {
общественный круг () {}
}
Смотрите также: Узнайте, как создавать классы на Java
Если вы не определите конструктор, Java предоставит конструктор по умолчанию, который ведет себя таким же образом.
Обратите внимание на пару вещей:
- Имя конструктора совпадает с именем класса.
- Этот конструктор использует общественный модификатор доступа, поэтому любой другой код может его вызвать.
- Конструктор не включает возвращаемый тип. В отличие от других методов, конструкторы не могут возвращать значение.
Конструкторы обычно выполняют какую-то инициализацию. Обратите внимание, что приведенный выше код не инициализирует значение радиуса. В этом случае язык автоматически установит его на ноль. Этот класс ожидает, что пользователь будет использовать setRadius (). Чтобы использовать более полезное значение по умолчанию, чем 0, вы можете назначить его в конструкторе:
public class Circle {
общественный круг () {радиус = 1; }
}
У кругов, созданных с помощью этого класса, по крайней мере, теперь будет фактическая площадь! Вызывающий по-прежнему может использовать setRadius () чтобы обеспечить радиус, отличный от 1. Но конструктор может быть еще дружелюбнее:
public class Circle {
общественный круг (двойной г) {радиус = г; }
}
Теперь вы можете создавать круги с определенным радиусом прямо с рождения:
Круг c = новый Круг (2);
System.out.println (c.area ()); // 12.56636
Это очень распространенное использование конструкторов. Вы часто будете использовать их для инициализации переменных значениями параметров.
Перегрузка конструктора
Вы можете указать более одного конструктора в определении класса:
общественный круг () {радиус = 1; }
общественный круг (двойной г) {радиус = г; }
Это дает вызывающему коду возможность выбора способа создания объектов:
Круг c1 = новый Круг (2);
Круг c2 = новый Круг ();
System.out.println (c1.area () + "," + c2.area ()); // 12.56636, 3.14159
С немного более сложным Кругом вы можете исследовать более интересные конструкторы. Эта версия хранит свою позицию:
public class Circle {
публичный двойник х, у, радиус;
общественный круг () {радиус = г; }
общественный круг (двойной г) {радиус = г; }
общественный круг (двойной x, двойной y, двойной r) {
this.x = x; this.y = y; радиус = r;
}
общественная двойная зона () {return 3,14159 * радиус * радиус; }
}
Теперь вы можете создать круг без аргументов, с одним радиусом или координатами x и y рядом с радиусом. Это тот же тип перегрузки, который Java поддерживает для любого метода.
Конструктор цепочки
Как насчет создания одного круга на основе другого? Это дало бы нам возможность легко копировать круги. Соблюдайте следующий блок:
public Circle (Circle c) {
this.x = c.x;
this.y = c.y;
this.radius = c.radius;
}
Это будет работать, но будет повторяться какой-то код без надобности. Поскольку в классе Circle уже есть конструктор, который обрабатывает отдельные свойства, вы можете вызвать его вместо это ключевое слово:
public Circle (Circle c) {
this (c.x, c.y, c.radius);
}
Это одна из форм цепочки конструкторов, вызывающая один конструктор из другого. Он использует меньше кода и помогает централизовать операцию, а не дублировать ее.
Вызов родительского конструктора
Другая форма объединения конструкторов возникает, когда конструктор вызывает конструктор своего родительского класса. Это может быть явное или неявное. Чтобы явно вызвать родительский конструктор, используйте супер ключевое слово:
супер (х, у);
Представьте себе класс Shape, выступающий в роли родителя Circle:
public class Shape {
двойной x, y;
общедоступная форма (двойной _x, двойной _y) {x = _x; y = _y; }
}
Он обрабатывает общее позиционирование для всех форм, поскольку это общая функциональность. Теперь класс Circle может делегировать обработку позиции своему родителю:
общественный класс Circle расширяет форму {
двойной радиус;
общественный круг (двойной г) {супер (0, 0); радиус = r; }
общественный круг (двойной x, двойной y, двойной r) {
супер (х, у);
радиус = r;
}
}
Построение суперкласса - очень важный аспект наследование в Java. Язык применяет это по умолчанию, если вы явно не вызываете супер в ваших конструкторах.
Модификаторы доступа к конструкторам
Конструкторы могут включать в свою подпись модификатор доступа. Как и другие методы, он определяет, какие типы вызывающих могут получить доступ к конструктору:
public class Test {
частный статический тест uniqueInstance = new Test ();
частный тест () {}
public static Test getInstance () {
return uniqueInstance;
}
}
Это более сложный пример, поэтому постарайтесь понять его:
- Класс не является абстрактным, поэтому из него можно создать экземпляр.
- Конструктор является частным, поэтому только сам этот класс может создать новый экземпляр.
- Через статическое свойство и метод класс предоставляет вызывающим объектам единственный уникальный экземпляр самого себя.
Используйте конструкторы в Java для создания объектов
Конструкторы жизненно важны для объектно-ориентированного программирования. Они позволяют создавать объекты, что очень важно!
В Java конструкторы похожи на другие методы и работают примерно так же. Вы должны помнить особые правила, касающиеся конструкторов по умолчанию, перегрузки и объединения конструкторов. Если конструкторы для вас новичок, возможно, вы захотите ознакомиться с другими основными концепциями Java, которые вам следует изучить перед началом работы.
Пишете ли вы графический интерфейс, разрабатываете серверное программное обеспечение или мобильное приложение на Android, изучение Java будет вам полезно. Вот несколько основных концепций Java, которые помогут вам начать работу.
Читать далее
- Программирование
- Ява
- Советы по кодированию
Бобби - энтузиаст технологий, проработавший разработчиком программного обеспечения большую часть двух десятилетий. Он увлечен играми, работает редактором обзоров в Switch Player Magazine и занимается всеми аспектами онлайн-публикации и веб-разработки.
Подписывайтесь на нашу новостную рассылку
Подпишитесь на нашу рассылку, чтобы получать технические советы, обзоры, бесплатные электронные книги и эксклюзивные предложения!
Еще один шаг…!
Пожалуйста, подтвердите свой адрес электронной почты в электронном письме, которое мы вам только что отправили.