2015-12-02 4 views
-1

Я настолько смущен для следующего объявления объекта в Java. напр: мне нужно создать объект для ClassNameВ чем разница между свойством объекта?

Я могу сделать это двумя способами:

  1. Object obj = new ClassName();
  2. ClassName obj1 = new ClassName();

что основное различие между этим obj и obj1 или они такие же?

+2

Объекты являются экземплярами одного и того же типа, но переменные имеют другой тип времени компиляции ... –

+0

Читайте о динамическом полиморфизме – Rehman

+0

Возможный дубликат [В чем разница между динамическим и статическим полиморфизмом в Java?] (Http : //stackoverflow.com/questions/20783266/what-is-the-difference-between-dynamic-and-static-polymorphism-in-java) – Basilevs

ответ

1

Object obj = new ClassName(); Ваш номер ссылки obj типа Object и ссылается на пример ClassName.

ClassName obj1 = new ClassName();, здесь и созданный объект, и ссылка имеют тип ClassName.

1

Я рекомендую прочитать о концепции (динамический) полиморфизм в официальном учебнике по Java от Oracle.

Link is right here.

2

Объект суперкласс ClassName, на самом деле, это самый верхний класс всех классов, которые вы создаете. Java позволяет использовать подкласс, как если бы это был экземпляр суперкласса (он имеет те же методы, хотя они могут быть переоценены).

Разница заключается в том, как вы можете их использовать. В первом случае компилятор увидит obj как ссылку типа Object, и ссылка фактически указывает на экземпляр типа ClassName. В вашем втором случае ваш компилятор увидит obj1 как ссылку типа ClassName, а ссылочные точки указывают на экземпляр типа ClassName.

В первом случае вы не сможете вызвать какие-либо методы, объявленные в подклассе, поскольку тип Object фактически не содержит эти методы (и компилятор не будет знать о них), тогда как вы можете используйте второй способ вызова методов и полей доступа, объявленных в подклассе.

Смежные вопросы