0

Дружественные классы в Java

Что такое "дружественные классы"? В C++, насколько я знаю, если класс Class1 объявляет своим другом Class2, то Class2 может обращаться ко всем (в том числе и private-) полям и методам Class1:
class Class1
{
  friend: Class2;
private:
  int a, b;
};

class Class2
{
  public:
  changer(Classs1 *data int _a, int _b);
};

void Class2::changer(Classs1 *data int _a, int _b)
{
    data->a = _a;
    data->b = _b;
}

* This source code was highlighted with Source Code Highlighter.

Дружественые классы в Java - возможно ли это? И нужно ли вообще? На первый взгляд - казалось бы, не нужно. Ведь в Java отсутствует перегрузка операторов (а как правило, дружественные функции в программах на C++ - это функции-операторы). Но порой нужно, чтобы между классами были "особые отношения": например, Class1 содержит некие поля
данных, но "не знает", как эти поля корректно загружать из файла какого-то формата или получать от пользователя. Зато ClassA знает, как загружать/сохранять данные в формате A, ClassB знает как загружать/сохранять данные в формате B, а ClassUser умеет эти данные получать от пользователя/передавать пользователю. На первый взгляд, можно сделать Class1 абстрактным классом, содержащим абстрактные методы для загрузки/сохранения полей данных, и в классах ClassA и ClassB реализовать эти методы. Теперь мы сможем загружать и сохранять данные обоих форматов. А если необходимо загрузить данные из формата A и сохранить их в формате B? И при этом некоторые из полей данных класса Class1 только для чтения?
Сформулируем задачу следующим образом. Классы данных и форматов не связаны родственными узами, поскольку они все же решают разные задачи: Class1 позволяет хранить данные и как-то ими манипулировать, а классы ClassA и ClassB позволяют сохранять/загружать данные различных форматов. Но при этом классы ClassA и ClassB должны иметь доступ на запись к тем полям Class1, которые остальные классы могут только читать. И такие отношения в парах классов Class1 - ClassA и Class1 - ClassB можно назвать если не дружественными, то , по крайней мере, приятельскими :)
Мое решение проблемы: