1

Тема: Внутрішні(inner) і вкладені(nested) класи. Практичне використання

Поки не дуже розумію, де їх можна практично застосувати
Для мене все виглядає таким чином, що їх варто застосовувати тоді, коли:

1. потрібно забезпечити успадкування 2 і більше класів(crush java :D )- внутрішні класи дозволяють незалежно від зовнішнього розширювати класи і, звісно, маніпулювати даними зовнішнього класу

це саме, по-моєму можна реалізувати, впихнувши в інтерфейс клас(дефолтно вкладений)

2. коли описуваний клас повинен використовуватись тільки в 1 класі- його можна замінити на внутрішній і включити у той клас, де він повинен застосовуватись, що стосується в першу чергу анонімних, які коротенькі і використовуються в 1 місці, а потім уже і класів-членів

3. з питань безпеки, тут правда не надто шарю

щодо вкладених(статичних)- то вони:
1. ніяк не пов'язані з зовнішнім класом- не мають ссилки на нього (ВладенийКлас.this)
2. можуть використовувати лише статичні члени зовнішнього класу
3. можуть містити в собі як статичні так і не статичні члени (на відміну від внутрішніх, які статичних членів не можуть містити)
4. щоб створити об'єкт вкладеного класу не потрібен об'єкт зовнішнього

питання тоді таке: нащо і де їх юзати?

2

Re: Внутрішні(inner) і вкладені(nested) класи. Практичне використання

Процитую першоджерело:

Why Use Nested Classes?

Compelling reasons for using nested classes include the following:

It is a way of logically grouping classes that are only used in one place: If a class is useful to only one other class, then it is logical to embed it in that class and keep the two together. Nesting such "helper classes" makes their package more streamlined.

It increases encapsulation: Consider two top-level classes, A and B, where B needs access to members of A that would otherwise be declared private. By hiding class B within class A, A's members can be declared private and B can access them. In addition, B itself can be hidden from the outside world.

It can lead to more readable and maintainable code: Nesting small classes within top-level classes places the code closer to where it is used.

Якщо коротко: нехай у вас є складна структура із простим інтерфейсом, скажімо, компілятор. Все, що вміє компілятор - це компілювати, тобто він має один основний метод (і ще кілька для налаштувань, але то гетери-сетери, нічого складного). А всередині там - і функції, і класи, і ідентифікатори, і лексеми, і вирази, і ПолІЗ, і асемблер, і ще бозна-що; і до того всього багатства немає ані найменшої потреби допускати криві ручки бидлокодерів. От тоді всі ці класи можна запхати всередину одного класу - для інших програмістів це буде один клас із простим інтерфейсом, і не буде жодної можливості дати йому якусь окрему лексему для чогось - тільки вхідний рядок.

Подякували: Regen1

3 Востаннє редагувалося Regen (17.11.2014 11:43:12)

Re: Внутрішні(inner) і вкладені(nested) класи. Практичне використання

koala написав:

Процитую першоджерело:

Why Use Nested Classes?

Compelling reasons for using nested classes include the following:

It is a way of logically grouping classes that are only used in one place: If a class is useful to only one other class, then it is logical to embed it in that class and keep the two together. Nesting such "helper classes" makes their package more streamlined.

It increases encapsulation: Consider two top-level classes, A and B, where B needs access to members of A that would otherwise be declared private. By hiding class B within class A, A's members can be declared private and B can access them. In addition, B itself can be hidden from the outside world.

It can lead to more readable and maintainable code: Nesting small classes within top-level classes places the code closer to where it is used.

Якщо коротко: нехай у вас є складна структура із простим інтерфейсом, скажімо, компілятор. Все, що вміє компілятор - це компілювати, тобто він має один основний метод (і ще кілька для налаштувань, але то гетери-сетери, нічого складного). А всередині там - і функції, і класи, і ідентифікатори, і лексеми, і вирази, і ПолІЗ, і асемблер, і ще бозна-що; і до того всього багатства немає ані найменшої потреби допускати криві ручки бидлокодерів. От тоді всі ці класи можна запхати всередину одного класу - для інших програмістів це буде один клас із простим інтерфейсом, і не буде жодної можливості дати йому якусь окрему лексему для чогось - тільки вхідний рядок.

дякую за файну статтю)
і це хороша думка, яка багато що пояснює

It increases encapsulation: Consider two top-level classes, A and B, where B needs access to members of A that would otherwise be declared private. By hiding class B within class A, A's members can be declared private and B can access them. In addition, B itself can be hidden from the outside world.