На самом деле это признак плохой формы наследования, называемой наследованием реализации. Либо исходный класс не был предназначен для наследования, и поэтому он решил использовать закрытый конструктор, либо что весь API плохо спроектирован.
Исправление для этого состоит не в том, чтобы выяснить способ наследования, а в том, чтобы выяснить, можете ли вы составить объект вместо наследования, и сделать это через интерфейсы. Т.е. класс Foo теперь является интерфейсом Foo с FooImpl. Затем интерфейсная строка может расширять Foo с помощью BarImpl, который не имеет никакого отношения к FooImpl.
Внутри BarImpl вы можете, если хотите сделать повторное использование кода, иметь внутри FooImpl в качестве члена, но это полностью зависит от реализации и не будет выставлено.