Нет, наследование не происходит между экземплярами; только между определениями классов.
Когда вы создаете экземпляр new Bar()
, создается экземпляр serviceFoo
в соответствии с его объявлением в Foo
. В текущем случае он не имеет экземпляров в Foo
, поэтому в новом экземпляре Bar
.
это будет нулевая ссылка.
Кроме того, вы должны знать, что все не примитивы в Java являются ссылочными типами. То есть foo
- это не Foo
, а ссылка на Foo
. Когда вы присваиваете new Bar()
foo
, вы полностью переназначаете его ссылку на новый объект.
Редактировать : Еще один незначительный придирки - если у вас уже есть экземпляр Foo
с именем foo
, как вы заявляете, тогда строка
Foo foo = new Bar();
не будет компилироваться, поскольку это переопределение foo
.