Вот как я бы это сделал ... при условии, что я правильно понимаю, что вы спрашиваете:
public class Parent {
private String a;
private String b;
public List<String> collect() {
return Arrays.asList(a, b);
}
}
public class ChildA extends Parent {
private String c;
private String d;
@Override
public List<String> collect() {
List<String> res = new ArrayList<>();
res.addAll(super.collect());
res.add(c);
res.add(d);
return res;
}
}
У родительского класса есть прямая реализация для collect()
.
Дочерний класс переопределяет реализацию collect()
от своего родителя, а в методе он вызывает родительские классы collect()
.
. Этот подход дает довольно повторяющийся код.
Альтернативным подходом было бы использование отражения, чтобы найти все поля, взломать доступ private
, а также извлечь и добавить все их значения в объект List
. Код для этого нетривиален, но его нужно реализовать только один раз.
Подход с помощью отражения нарушает абстракцию типов для доступа к закрытым полям в другом классе. Это немного против OO ... в зависимости от вашей точки зрения.