В четырех случаях допустимы только 3.
A a = new A();
A a = new B();
B b = new B();
В наследовании Java вы можете создать экземпляр подкласса и назначить его суперклассу, но не наоборот B b = new A();
( возникнет ошибка компиляции), поскольку подкласс будет унаследован от суперкласса, поэтому все методы либо запускаются из суперкласса из подкласса, если они переопределены.
Если вы вызываете метод printHi
, вы можно увидеть, что именно происходит.
- Для
A a = new A();
printHi
выведет Hi in A
, поскольку это экземпляр класса A
- Для
A a = new b();
printHi
напечатает Hi in B
потому что это экземпляр класса B
- Для
B a = new B();
printHi
напечатает Hi in B
, потому что это экземпляр класса B