Вам понадобится файл class
для фактического использования класса, но это не значит, что вам понадобится исходный файл.
Давайте рассмотрим возможности на примере классов Dog
и Animal
. Предполагая, что класс Dog
является подклассом класса Animal
, мы можем сделать следующее:
Если у вас есть и Animal.class
, и Animal.java
, вы можете создать класс Dog
.
Если у вас есть Animal.class
, но не Animal.java
, вы можете сделать Dog
класс.
Если у вас нет Animal.class
, но есть Animal.java
, вы можете создать класс Dog
. (Это означает, что файл Animal.java
необходимо будет скомпилировать при компиляции файла Dog.java
.)
Если у вас нет Animal.class
или Animal.java
, вы не можете создать класс Dog
.
Вот табличная версия вышеприведенного:
Have Animal.java? Have Animal.class? Can make Dog class?
----------------- ------------------ -------------------
Yes Yes --> Yes
Yes No --> Yes
No Yes --> Yes
No No --> No
Если у вас есть файл class
, существуют программы, которые могут декомпилировать файл class
для создания удобочитаемого исходного файла java
, однако он не восстановит точный источник, который использовался для создания class
файл.
Однако, в этом случае, если все, что необходимо, это расширить класс Animal
для создания нового класса Dog
, сам исходный код не требуется.
Имейте это в виду - всякий раз, когда класс создается на Java, он всегда расширяет класс Object
. Даже если у нас нет доступа к исходному коду класса Object
, поскольку у нас есть доступ к Object.class
в Java, мы можем создавать свои собственные классы.
Этот случай аналогичен - пока у нас есть файл class
для класса, мы можем использовать его в полной мере. Единственное, чего не хватает, так это фактической реализации, которая указана в исходном коде.