Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.11.2017, 23:44   #1
АлексейP
Пользователь
 
Регистрация: 22.10.2017
Сообщений: 17
По умолчанию ООП. Java. Конструкторы.

Здравствуйте.

Объясните, пожалуйста, роль конструкторов в языке Java и в ООП в целом.

В чем разница между

Код:
class Fraction {
	int depth;

	Fraction() {
		depth = 10;
	}
}
и

Код:
class Fraction {
	int depth = 10;
}
И ладно бы, если бы можно было создавать конструктор как шаблон для разных экземпляров в количестве, большем одного с собственными именами, т.е.:

Код:
class Fraction {
	int depth;

	Fraction1() {
		depth = 10;
	}

	Fraction2() {
		depth = 20;
	}
}
что позволяло бы создавать некоторое количество различных экземпляров класса.

Но в чем преимущество конструктора, если я могу явно, без конструктора, переопределить значение полей каждого экземпляра класса Fraction object и потрачу на это меньше строк и, соответственно, символов?

Код:
class Fraction {
	int depth;

	public static void main(String[] args) {
		Fraction object = new Fraction();
		object.depth = 10;
	}
}
Код:
class Fraction {
	int depth;

	Fraction() {
		depth = 10;
	}

	public static void main(String[] args) {
		Fraction object = new Fraction();
	}
}
АлексейP вне форума Ответить с цитированием
Старый 25.11.2017, 23:59   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от АлексейP Посмотреть сообщение
в чем преимущество конструктора
Зависит от ситуации.
Для просто инициализации внутри класса полей литералом (20) может быть и правда проще не в конструкторе.

Насчет извне
Цитата:
Сообщение от АлексейP Посмотреть сообщение
object.depth = 10;
Так тут же как раз короче было бы с конструктором, раз вас это волнует ) (особенно если создать надо не 1 экземпляр)
Но еще например можно сделать поля final, чтоб их нельзя было изменить потом. Часто бывает полезно и может спасти от ошибок Ну и вообще конструктор же гарантирует, что вы не забыли инициализировать все, что нужно.
Еще конструктор может вызвать конструктор базового класса.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 26.11.2017 в 00:02.
Alex11223 вне форума Ответить с цитированием
Старый 26.11.2017, 01:55   #3
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Цитата:
Сообщение от АлексейP Посмотреть сообщение
если я могу явно, без конструктора, переопределить значение полей каждого экземпляра класса
Вы какой-то вырожденный вариант конструктора рассматриваете. Конструктор может выполнить гораздо более сложную работу - запросить какие-то ресурсы, сделать какие-то запросы и т.д.
Цитата:
Сообщение от АлексейP Посмотреть сообщение
что позволяло бы создавать некоторое количество различных экземпляров класса.
А для этого в конструторе можно использовать параметры:
Код:
        Fraction(int d) {
		depth = d;
	}
Black Fregat вне форума Ответить с цитированием
Старый 27.11.2017, 21:55   #4
АлексейP
Пользователь
 
Регистрация: 22.10.2017
Сообщений: 17
По умолчанию

Я че-то туплю. В данном случае мы создаем отдельный метод или конструктор? Что обозначает слово Fraction?

Код:
public Fraction sumFractionTo(Fraction obj){
        return new Fraction(this.numerator * obj.denominator + obj.numerator * this.denominator, this.denominator * obj.denominator);
}
АлексейP вне форума Ответить с цитированием
Старый 27.11.2017, 21:58   #5
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Тип возвращаемого значения.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ООП, Java tolikprankster Помощь студентам 1 13.10.2014 19:42
Основы ООП в языке Java ghostly92 Помощь студентам 0 25.12.2013 18:32
Изучение ООП. Java или C++? Sna1L Помощь студентам 8 21.12.2011 15:22
Динамический многоугольник(ООП). Конструкторы. alex_8 Помощь студентам 0 30.11.2010 21:53