Подтвердить что ты не робот

Невозможно понять необходимость создания отчета Process.java

Я случайно прошел через исходный код основных классов Java. Я обнаружил, что Process.java - это класс public abstract. Когда я прошел код, функция не имеет определения. Означает ли это, что он должен был быть объявлен как Interface. Есть ли какая-то преднамеренная причина. Может ли кто-нибудь помочь мне понять необходимость такого дизайна.

Ссылка на code

4b9b3361

Ответ 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, этот класс предоставляет конструктор, который можно вызывать без аргументов. Интерфейсы не могут этого сделать.