Я так скажу, что упаковщик полей в JVM принципиально может положить поля подкласса в блок, где лежат поля суперкласса, если там есть подходящие дырки. Если бы у рыбы была шерсть (зачёркнуто) интериор-поинтеры, то было бы принципально возможно получить поле класса SubClass, которое лежит по отрицательному оффсету от SubClass* :)
Да, но в JVM нет нужды в этом, так как не поддерживается множественное наследование. А вот можно ли в плюсах упаковать весь Base2 в дырки от Base1 - думаю что стандарт не ограничивает, а остальное зависит от разработчиков компиляторов.