Невозможно понять необходимость создания отчета Process.java
Я случайно прошел через исходный код основных классов Java. Я обнаружил, что Process.java
- это класс public abstract
. Когда я прошел код, функция не имеет определения. Означает ли это, что он должен был быть объявлен как Interface
. Есть ли какая-то преднамеренная причина. Может ли кто-нибудь помочь мне понять необходимость такого дизайна.
Ссылка на code
Ответы
Ответ 1
Process
является абстрактным, потому что он может иметь различную реализацию в каждой операционной системе. Разработчики приложений не реализуют этот абстрактный класс; он реализован как часть среды выполнения Java.
Поскольку все методы абстрактны, его можно было объявить как интерфейс, но это сделало бы класс неспособным развиваться в будущем. Например, новые методы не должны добавляться в интерфейс после объявления в открытом API, потому что тогда любые существующие реализации будут несовместимы. Напротив, новый (конкретный) метод может быть легко добавлен в абстрактный класс.
Экземпляры Process
создаются средой выполнения либо с помощью методов класса Runtime
, либо из экземпляра ProcessBuilder
. Обычно приложения не используют оператор new
для непосредственного создания экземпляра (конкретного подкласса).
Ответ 2
Я подозреваю, что критическая разница возникает из-за того, что вы можете implement
как можно больше interface
, но вы можете только extend
один class
, быть абстрактным или иным образом.
Создание Process
abstract поэтому гарантирует, что если вы решите создать его с нуля (т.е. не из системного factory, который является обычным маршрутом), вы не сможете добавить функциональность в родительский класс из этого. Насколько это помогает, я не уверен.
Может быть, это вещь безопасности, поскольку предполагается, что процессы будут созданы и принадлежат операционной системе. Это делает все возможное, чтобы препятствовать вам создавать их самостоятельно.
Добавлен
В глубине души я думаю, что причина, по которой это не интерфейс, исторична. Помните, что Process
находилось в java.lang
с момента года и обратно, тогда интерфейс был чем-то реализованным, а не определением аспекта личности объекта. Эта концепция выросла намного позже.
Обратите внимание, что Process
существует с JDK 1.0, тогда как многие из более полезных интерфейсов появились намного позже, интерфейс CharSequence
, например, не появился до JDK 1.4. Я думаю, что произошел сдвиг парадигмы с объектами, являющимися первичными, и интерфейсы действительно полезны для интерфейсов, являющихся быть всеми, и заканчивать все, пока объекты просто реализуются.
Таким образом, Process
будет одним из классов old, которые были созданы в то время, когда Process
был реальным объектом и, вероятно, повел Audi Quattro, а не некоторые смутные условные namby-pamby мизмазная вещь, которая имеет некоторые методы в ней и выглядит немного так.
Ответ 3
Класс Process
явно имеет внутреннюю функциональность, которую мы не можем видеть, и это должно зависеть от операционной системы по понятным причинам.
Я предполагаю, что они не хотят, чтобы вы реализовали свои собственные классы, соответствующие API, которые не наследуют скрытые функциональные возможности Java-класса, определенного классом Process.
Ответ 4
Согласно документации java.lang.Process
, этот класс предоставляет конструктор, который можно вызывать без аргументов. Интерфейсы не могут этого сделать.