Два важных принципа объектно-ориентированного проектирования не позволяют вам делать то, что вы просите: абстракция и инкапсуляция.
- Абстракция - это процесс определения общей концепции, которая содержит только детали, необходимые для ее использования в конкретном контексте (подробности здесь ). В этой ситуации абстракция - это
InputStream
, который является общим интерфейсом, который может предоставлять байты, независимо от источника этих байтов . Абстракция InputStream
не имеет понятия пути к файлу; это относится только к конкретным реализациям InputStream
.
- Инкапсуляция - это процесс сокрытия деталей реализации класса от потребителей / пользователей этого класса. В этой конкретной ситуации
FileInputStream
инкапсулирует детали файла, из которого он читает, потому что как InputStream
эта информация не имеет отношения к использованию. Поле path
instance инкапсулировано и, как таковое, недоступно для пользователей класса.
Сказав это, можно получить доступ к переменной path
, если вы готовы принять некоторые важные ограничения. По сути, суть в том, что вы можете проверить, действительно ли InputStream
является экземпляром FileInputStream
, и, если это так, использовать отражение, чтобы прочитать поле экземпляра path
. Я опущу детали этого доступа, так как его легко обнаружить в java.lang.Class
Java-документах и в Интернете, и в большинстве случаев это не очень хорошая вещь. Поскольку вопрос не дает контекста о том, почему, трудно предложить более разумные подходы.