Class Outer
{
...
private class Node
{
private T data;
...
private T getData()
{
return data;
}
}
}
Что цель использовать установлено, и получите методы, если внешний класс может получить доступ к внутренним членам парламента, не занимающим официального поста класса? Какова цель сделать внутренние классы частными? Доступ пакета?
Частные внутренние классы пишутся, когда вы не хотите, чтобы класс был открыт для внешних классов внутри или вне пакета. Они используются только внутри класса внешнего уровня.
Геттеры и сеттеры обычно не имеют смысла внутри частных классов, потому что вы в любом случае можете получить доступ к переменным экземпляра.
Вы могли бы пропустить тривиальные getters и setters, но часто эти методы нетривиальны (распространенный случай - паттерн 'lazy load').
Отредактировано для добавления: Ленивая загрузка - это когда вы инстанцируете член только тогда, когда запрашиваются данные. Он используется, когда получение данных не всегда необходимо и стоит дорого.
class a
{
private:
int m_aNumber;
bigDeal *m_pBig;
public:
a() { m_aNumber = 0; m_pBig = NULL; }
~a() { if (m_pBig) delete m_pBig; }
// trivial
int get_aNumber() { return m_aNumber;}
void set_aNumber(int val) { m_aNumber = val; }
// lazy load
bigDeal *get_Big()
{
if (m_pBig == NULL)
{
// bigDeal::bigDeal() downloads data from Mars Rover
// takes 20 minutes, costs $1.2 million dollars to run
m_pBig = new(bigDeal);
}
return m_pBig;
}
void set_Big(bigDeal *val)
{
m_pBig = val;
}
}
Прежде всего, я бы посоветовал относиться к внутренним public
/protected
/internal
классам так же, как и к любым другим "внешним" классам. То есть, используйте те же принципы проектирования.
Что касается внутренних классов, то когда я использую внутренние private классы, они обычно оказываются просто кучей байтов... то есть они не выполняют реальной обработки. Они просто существуют для того, чтобы облегчить написание кода для внешнего класса.
Я не говорю вам писать плохой код, но вы можете быть гораздо более мягкими в своем дизайне с внутренними приватными классами. Как правило, они должны быть простыми и легкими... не перебарщивайте с ОО во внутренних классах. Кроме того, если в итоге вам придется что-то изменить во внутреннем классе, вам придется обновить только ссылки во внешнем классе... что, в общем-то, не так уж и важно.