Переменная имени класса в том же классе не понимает концепцию

Я не мог понять следующую концепцию того, как это работает, когда мы создаем объект класса

class MyClass {
    int data;
    MyClass var;  
}

Я совершенно не понимаю, как это будет работать и какова цель создания объекта с тем же именем класса. Я не могу понять, в чем суть этой декларации.

Вы знакомы со связанным списком? Концепция практически идентична.

Joe C 26.10.2018 20:59

В реальной жизни: ты Человек. И у тебя есть отец. Ваш отец тоже личность. Замените MyClass на Person в вашем примере, а var на отца, и вы получите эту реальную ситуацию, смоделированную как класс.

JB Nizet 26.10.2018 21:01

да, но как это работает, поскольку я упомянул имя метода с тем же именем, что и имя класса, называемое конструктором, но что этот тип объявления называется ???

user3116344 26.10.2018 21:02

В опубликованном вами коде нет ни метода, ни конструктора. Так что я не совсем понимаю, о чем вы говорите. У вас есть класс с двумя полями (или переменными экземпляра). docs.oracle.com/javase/tutorial/java/javaOO/variables.html

JB Nizet 26.10.2018 21:04

Дилемма курицы и яйца, не так ли?

user10527814 26.10.2018 21:04
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
5
425
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

В вашем случае каждый экземпляр MyClass может иметь ссылку на другой экземпляр MyClass. Название не дает намеков на то, зачем вам это нужно. Но в целом такая структура позволяет связывать, украшать и вкладывать.

Например, вы можете реализовать цепочку этапов обработки. Каждый вызывает следующий в цепочке до конца (var == null).

В качестве альтернативы, ваш класс может «обернуть» другой экземпляр класса и сделать что-то вроде вызовов методов журнала, прежде чем делегировать их обернутому экземпляру.

Подобную структуру можно использовать для моделирования деревьев, например, Node, каждый из которых имеет список дочерних узлов (List<Node> children). Листовые узлы не будут иметь потомков.

Если вы хотите смоделировать некоторые сценарии реального мира, вам, возможно, придется использовать это понятие.

Например, представьте себе ветку Дерева. На ветке дерева может быть n веток. Ветвь будет иметь ссылку на ветки рядом с ней.

class Branch {
    Branch branch1;
    Branch branch2;
    Branch branch3;
}
Ответ принят как подходящий

Это полностью допустимое объявление класса Java. Пример того, что MyClass var; означает в вашем коде, следующий:

Представьте, что этот класс называется Directory (он представляет местоположение каталога на жестком диске в реальной жизни), и мы хотим смоделировать, что в каталоге может быть больше (под) каталогов (для простоты только один :)). Таким образом, мы могли бы смоделировать это, используя эту структуру:

class Directory {
    int amountOfFolders;
    Directory subdiretory;         // <-- child object(directory)!
    // Directory[] subdiretories;  // out of curiosity, this would be much more real
}

Таким образом, когда мы создаем объект Directory, устанавливаем его дочерний каталог (и) и делаем с ним кое-что.

Это называется Состав (подробнее см. Разница между наследованием и составом и Наследование и состав (часть «Основы композиции»))

См. Ниже код с комментариями для получения более подробной информации ...

class MyClass {

    int data;
    // attribute of type MyClass, this can represent a hierarchical structure
    // in real life applications.
    MyClass var;

   // this is not a class method, but its constructor, used to create instances
   // of this class, i.e.: MyClass c = new MyClass();
   public MyClass() {
   }

   // this is another constructor, which receives a parameter for setting its
   // attribute data, i.e.: MyClass c = new MyClass(3);
   public MyClass(int data) {
       this.data = data;
   }
}

Демо: https://ideone.com/2qirCQ

Вот Репозиторий GitHub с этим кодом.

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

user3116344 26.10.2018 21:41

Другие вопросы по теме