Всем доброго времени суток. Я, конечно, понимаю, что вопрос прямиком из детского сада, но всё же.
Проходя ссылочные типы данных увидел строки вроде:
Person person - new Person;
Cat cat = new Cat;
Animal animal = new Animal;
В целом, понятно, что это. Но нет четкого понимания, что значит каждое из этих повторяющихся слов и как это использовать. Объясните дураку)
Заранее спасибо
Сергей Романенко
2 уровень
Person person = new Person
Решен
Комментарии (19)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Евгений Жуковец
21 июня 2018, 22:42
Если ты напишешь просто Cat cat, то у тебя будет объект, содержащий null;
После этого ты присваиваешь ему что то, а конкретно экземпляр класса Cat.
0
Александр Смирнов
21 июня 2018, 22:41
Cat (тип переменной, т.к это не примитивный тип следовательно он ссылочный) cat (это переменная или иначе говоря ссылка на объект) = new Cat ( а это сам объект, который мы создаем и на который ссылается наша переменная cat ссылочного типа Cat)
0
Сергей РоманенкоExpert
21 июня 2018, 23:10
Ок. Мы указали Cat в качестве типа переменной, тем самый дали понять программе, что тип - ссылочный. А почему Cat? Для того, чтобы сослаться на объект Cat? Так мы же вроде new Cat пишем для этого. Или нет?
0
Александр Смирнов
21 июня 2018, 23:14
первая Сat - это ничто иное как класс Cat, а new Cat - это его объект (иначе экземпляр класса Cat)
0
Сергей РоманенкоExpert
21 июня 2018, 23:32
То есть в данном примере (как я понял):
1й Person указывает на то, что мы ссылаемся на класс Person из 11й строки.
2й person - это просто имя для конкретного субъекта, которого мы будем описывать используя переменные из класса Person. Имя переменной может быть любым. К тому же мы можем создать несколько объектов с разными именами и у каждого будут свои параметры.
3й new Person - просто команда, с помощью которой создается один экземпляр класса Person со своими данными, с которыми я уже потом работаю.
Я правильно понял?
+1
Александр Смирнов
21 июня 2018, 23:37
Все верно.
p.s Про 1й Person можно сказать, что он просто указывает, что это класс Person
0
Сергей РоманенкоExpert
21 июня 2018, 23:47
Ясности на порядок больше)
Остался, наверное, последний вопрос... А почему мы тогда дважды ссылаемся на этот класс?
Ну указали мы 1м Person-ом, что мы ссылаемся на этот класс. Зачем мы тогда при создании объекта, снова указываем, что мы создаём экземпляр именно этого класса?
Я, просто, привык, что программа - это конструктор, где можно лепить что угодно из чего угодно. Или это, просто, такое негласное правило, что нужно писать именно вот так? К примеру, что произойдёт, если я поменяю на что-нибудь другое один из этих Person-ов? Пока не знаю: зачем и на что? Но всё же
0
Александр Смирнов
21 июня 2018, 23:53
Если допустим тебе нужно создать экземпляр класса Person, то в записи Person person = new Person(); ты сможешь заменить только person (т.к это всего лишь название переменной),
в остальном нужно придерживаться синтаксиса языка.
ps Возможно и есть еще какие-то варианты в чем я сомневаюсь, но я сам пока еще не так глубоко изучил ООП.
0
Сергей РоманенкоExpert
22 июня 2018, 00:09
Конструкция, как оказалось, несложная. Просто, интересно: почему не сделали проще? Дополнение в виде new Person кажется ненужным. Ведь можно просто написать Person person и всё. Переменную ссылкой обозначили, на класс сослались, название переменной дали - вроде и всё. Тогда бы процесс был также прост, как создание любой другой переменной, где объект создавался бы сам. Да и конструкция компактнее
0
Александр Смирнов
22 июня 2018, 00:17
Когда ты создаешь экземпляр класса new Class() в скобочках ты можешь передавать параметры конструктору, чтобы с ними произвести определенные действия.
Допустим есть у тебя класс Human.
У этого класса есть конструкторы:
public Human (int age) {1 конструктор}
и допустим
public Human (int age, String name) (2 конструктор}
дак вот, ты создаешь 2 объекта класса Human ( Human human1 = new Human(35) и Human human2 = new Human (35, Серега))
ты передаешь эти параметры конструктору причем( причем 1 хуман использует 1 конструктор, а хуман2 второй), а уже дальше с ними происходят изменения.
Дальше это все будет рассказано, но может мои знания тебе тоже помогут.
0
Сергей РоманенкоExpert
22 июня 2018, 00:22
Это многое объясняет. А два класса в одинаковыми названиями - это вообще законно?
0
Сергей РоманенкоExpert
22 июня 2018, 00:23
Стоп. Не два класса, а два объекта. Не так понял. Но всё равно вопрос тот же)
0
Александр Смирнов
22 июня 2018, 00:25
Два класса с одинаковым именем - законно, если один класс статический, а другой нет.
0
Александр Смирнов
22 июня 2018, 00:25
а про объекты, смотря что подразумевается под названиями, если можно пример, тогда постараюсь рассказать
0
Игорь Мамаев
22 июня 2018, 00:28
Дальше, когда будет наследование и интерфейсы, ты увидишь что вторая часть тоже нужна.
Потому что можно присвоить переменной объект не обязательно этого класса. Animal cat = new Cat(); - будет и такое.
Так же ты можешь создать переменную, а объект к ней привязать позже. Например Cat kitty = getKittyFromNursery();
0
Игорь Мамаев
22 июня 2018, 00:29
*Так же ты можешь создать переменную, а объект к ней привязать позже. Или какой-то метод может возвращать объект: Cat kitty = getKittyFromNursery();
Поэтому объявление переменной не равно созданию объекта.
0
Сергей РоманенкоExpert
22 июня 2018, 00:31
Кстати, да. Было в лекции
0
Сергей РоманенкоExpert
22 июня 2018, 00:33
В общем, думаю, что дальше по ходу обучения разберусь.
Вам спасибо большое. Помогли разобраться)
0
Александр Смирнов
22 июня 2018, 00:34
и тебе спасибо за вопросы, сам теперь все в кучу собрал)
0