Розширений опис класів

І цей код компілюватиметься. Якщо ви використовуєте NetBeans, то при складанні проекту у вас з'явиться директорія build / classes в якій ви зможете знайти два файли class - їх імена збігаються з іменами класів. Тепер спробуємо розібратися навіщо такий опис може знадобитися.
Такі «закриті» класи ви можете використовувати ТІЛЬКИ в тому ж пакеті, в якому вони знаходяться. Значить ви можете описати клас, який ніхто не побачить. Що в деяких ситуаціях буває зручно. Наприклад ви створюєте клас, логіка роботи якого зручно розбивається на кілька класів. Тобто зручно оголосити ще один і більше класів. Але з іншого боку про ці допоміжних класах інших класів в інших пакетах краще взагалі не знати. Інкапсуляція на класовому рівні 🙂
Я не пропоную прямо зараз кидатися придумувати ситуації, коли це може вам знадобитися - як тільки ви в таку ситуацію потрапите, то просто будете знати, що є і така можливість оголосити клас.
Коли ви набираєте певний досвід, нерідко стає достатнім просто дізнатися про існування будь-яких цікавих механізмів, технологій, конструкцій - ви вже «вгадуєте», що «ця штука цікава і про неї треба пам'ятати, а може і покопатися». Досвід конкретного використання - це вже другий крок. Не завжди все працює так, як описано в документації.

вкладені класи

package edu. javacourse. many;

public class ResearchClass

private class InternalOne

protected class InternalTwo

public class InternalFour

static private class InternalStaticOne

static protected class InternalStaticTwo

static class InternalStaticThree

static public class InternalStaticFour

public void testInternal ()

InternalOne inOne = new InternalOne ();

InternalTwo inTwo = new InternalTwo ();

InternalThree inThree = new InternalThree ();

InternalFour inFour = new InternalFour ();

InternalStaticOne inStOne = new InternalStaticOne ();

InternalStaticTwo inStTwo = new InternalStaticTwo ();

InternalStaticThree inStThree = new InternalStaticThree ();

InternalStaticFour inStFour = new InternalStaticFour ();

Зверніть увагу на рядок 6 - де створюється об'єкт класу SimpleAbstract. Подивіться ДУЖЕ уважно - там в кінці стоять фігурні дужки. Ми отримали не клас SimpleAbstract. а його спадкоємця - анонімний клас, який вже НЕ абстрактний. тому і вийшло. Ось такий от цікавий випадок.

ініціалізація

В даному розділі я розповім про досить зручному механізмі установки початкових значень полів у об'єкта та класу. Якщо забігти вперед, то задача установки початкових значень настільки важлива, що для неї придумана і реалізована не одна технологія і бібліотека. Але ми поки не будемо заглиблюватися настільки сильно - просто познайомимося з деякими можливостями мови Java.
Отже, як ви можливо пам'ятаєте, для установки значень поля ми вже використовували два варіанти:

Крім цих способів ви можете використовувати ще один (в двох модифікаціях):

  1. Статичний блок ініціалізації
  2. Блок ініціалізації суті (об'єкта)

перерахування

Перерахування (enum) - ще один досить зручний механізм, який з'явився в Java версії 1.5. Нерідко в програмі зручно описати деякий кінцеве безліч констант. Наприклад список планет сонячної системи, дні тижня і т.п. З одного боку робити це динамічним безліччю безглуздо - безліч досить усталене. З іншого боку просто описати кілька констант теж не найкраще рішення. Наприклад для днів тижня такий варіант запису не дуже красиво виглядає:

Змінної wd з типом перерахування я спочатку привласнюю значення «MONDAY». У методі println (я навіть не знаю як це назвати) я не започатковано вже оголошену змінну новим значенням: FRIDAY, при цьому, навіть не згадую перевизначення метод toString. Результат: «П'ятниця Опа!».
Я просто намагався експериментувати - компілятор помилки не дав. Дуже хочеться зрозуміти чому це працює і як це називається.

При виклику System.out.println () всі параметри всередині дужок перетворюються в рядки. Для класу (і для enum теж) це виклик toString ().

Ну ось ... Виявляється, варто було трохи потерпіти і прочитати главу «Рішення на основі класів» - там є відповідь на це питання 🙂

Схожі статті