Объект суперкласс ClassName, на самом деле, это самый верхний класс всех классов, которые вы создаете. Java позволяет использовать подкласс, как если бы это был экземпляр суперкласса (он имеет те же методы, хотя они могут быть переоценены).
Разница заключается в том, как вы можете их использовать. В первом случае компилятор увидит obj как ссылку типа Object, и ссылка фактически указывает на экземпляр типа ClassName. В вашем втором случае ваш компилятор увидит obj1 как ссылку типа ClassName, а ссылочные точки указывают на экземпляр типа ClassName.
В первом случае вы не сможете вызвать какие-либо методы, объявленные в подклассе, поскольку тип Object фактически не содержит эти методы (и компилятор не будет знать о них), тогда как вы можете используйте второй способ вызова методов и полей доступа, объявленных в подклассе.
Объекты являются экземплярами одного и того же типа, но переменные имеют другой тип времени компиляции ... –
Читайте о динамическом полиморфизме – Rehman
Возможный дубликат [В чем разница между динамическим и статическим полиморфизмом в Java?] (Http : //stackoverflow.com/questions/20783266/what-is-the-difference-between-dynamic-and-static-polymorphism-in-java) – Basilevs