Два аргумента для ответа на названный вопрос:
1) Предполагается, что Java будет «писать один раз, запускать где угодно», поэтому код, написанный для одной иерархии, не должен вызывать исключения RuntimeException, когда мы где-то меняем среду. (Конечно, есть исключения - каламбур - из этого правила.)
2) Java JIT выполняет очень агрессивные оптимизации, основанные на знании того, что данный символ должен быть только одного типа и только одного типа. Единственный способ обойти это - сыграть.
Как уже упоминали другие, ваш "экземпляр" не совпадает с вопросом, на который я здесь ответил. Что-либо с любыми типами, утка или статика, может иметь проблему, которую вы описали. Есть лучшие способы ООП справиться с этим.