protected-а в джавата не е баш protected-а, както си го знаеш от С++!!!
Достъп до protected имат и класовете които са в същия package. Сиреч, ако не те кефи рефлекшъна, примера който си дал може да се попреработи като класа Б е в същия package като А и не наследява А. quickPatch става static и приема като аргумент обект от тип А. Нещо като
A legacyMethod_CreateInstanceOfA(); // part of untouchable API
class B
{
// greasy jewish slavedriver told me to fix the class, or else my services are no longer required
void static quickPatch(A a) {
a.access_protected_member1_of_A;
a.access_protected_member2_of_A;
job_done;
}
}
void main() {
A a = legacyMethod_CreateInstanceOfA();
B.quickPatch(а);
a.WorkWithInstanceOfA();
}
може и legacyMethod_CreateInstanceOfA(); и quickPatch(а) да си ги пакетираш във фактори метод.
Иначе, кода от първоначалния ти пост че няма да мине никъде е ясно. Абсолютно същото твърдение обаче съм чувал за C# и Java ( С# беше в ролята на тъпия боклук ). Извода - като не те кефи нещо - не те кефи и т'ва е!!!