Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Ответ
 
Опции темы
Старый 26.11.2017, 00:44   #1
АлексейP
Пользователь
 
Регистрация: 22.10.2017
Сообщений: 17
Репутация: 10
По умолчанию ООП. 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 вне форума   Ответить с цитированием
Старый 26.11.2017, 00:59   #2
Alex11223
Модератор
Заслуженный модератор
 
Регистрация: 12.01.2011
Сообщений: 15,834
Репутация: 3110

icq: 512-765
skype: alexp.frl
По умолчанию

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

Насчет извне
Цитата:
Сообщение от АлексейP Посмотреть сообщение
object.depth = 10;
Так тут же как раз короче было бы с конструктором, раз вас это волнует ) (особенно если создать надо не 1 экземпляр)
Но еще например можно сделать поля final, чтоб их нельзя было изменить потом. Часто бывает полезно и может спасти от ошибок Ну и вообще конструктор же гарантирует, что вы не забыли инициализировать все, что нужно.
Еще конструктор может вызвать конструктор базового класса.

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

Цитата:
Сообщение от АлексейP Посмотреть сообщение
если я могу явно, без конструктора, переопределить значение полей каждого экземпляра класса
Вы какой-то вырожденный вариант конструктора рассматриваете. Конструктор может выполнить гораздо более сложную работу - запросить какие-то ресурсы, сделать какие-то запросы и т.д.
Цитата:
Сообщение от АлексейP Посмотреть сообщение
что позволяло бы создавать некоторое количество различных экземпляров класса.
А для этого в конструторе можно использовать параметры:
Код:

        Fraction(int d) {
		depth = d;
	}

Black Fregat вне форума   Ответить с цитированием
Старый 27.11.2017, 22:55   #4
АлексейP
Пользователь
 
Регистрация: 22.10.2017
Сообщений: 17
Репутация: 10
По умолчанию

Я че-то туплю. В данном случае мы создаем отдельный метод или конструктор? Что обозначает слово 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, 22:58   #5
Alex11223
Модератор
Заслуженный модератор
 
Регистрация: 12.01.2011
Сообщений: 15,834
Репутация: 3110

icq: 512-765
skype: alexp.frl
По умолчанию

Тип возвращаемого значения.
Alex11223 вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ООП, 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 22:53


07:47.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru