Как создать объект класса с закрытыми конструкторами? - PullRequest
0 голосов
/ 27 декабря 2018

Если конструкторы используются для инициализации объектов, а не для создания объекта, то для класса с закрытым конструктором, почему мы не можем создать объект в другом классе?

class Test1 {
    private Test1() {

    }
    void one() {

    }
    Test1 t1=new Test1();
    void two() {
        t1.one();
    }
}
class Test {
    public static void main(String[] args) {
        Test1 t1=new Test1();// line 3
    }
}

В приведенном выше кодеЯ получаю сообщение об ошибке в строке 3.

Поскольку ключевое слово new создает объект, а не вызывает конструктор, есть ли способ создать объект класса Test1?

Ответы [ 6 ]

0 голосов
/ 27 декабря 2018

Если конструктор не виден, его нельзя вызвать извне.

Для этого есть несколько вариантов использования:

  1. Singleton-Pattern - существует только один экземпляр, который хранится в статической переменной-члене.
  2. Класс состоит только из статических методов и констант, и такой экземпляр не используется (например, java.lang.Math)
  3. Экземпляры этого классасоздаются через статические фабричные методы.Это дает автору свободу реорганизовывать конструкторы по своему усмотрению, не нарушая общедоступный API.Кроме того, он может объявить статический метод, чтобы он возвращал более общий тип интерфейса вместо конкретного типа.
0 голосов
/ 27 декабря 2018

Вы не можете создать экземпляр класса с закрытым конструктором.Закрытый конструктор предотвращает создание объекта извне.

В этом примере мы не можем создать объект Test1 вне того же класса.т.е. мы не можем создать объект в методе main ().

Если вам нужно создать объект Test1, его можно реализовать внутри класса с помощью статического метода.Это иллюстрируется mkjh

0 голосов
/ 27 декабря 2018

Если единственные конструкторы класса являются закрытыми, то другой код не должен напрямую его создавать.

(Для педантов да можно использовать отражение (если вы можете обойти безопасность Java),также JNI и есть вложенные классы.)

Класс может предоставлять статические методы создания для внешнего кода для создания экземпляров контролируемым образом.

0 голосов
/ 27 декабря 2018

Новое ключевое слово использует , используя конструктор, поскольку он используется для инициализации объекта во время создания.Если вы не предоставите никаких конструкторов, компилятор вставит открытый по умолчанию.Если вы предоставите конструктор, он не будет.Даже если предоставленный конструктор является приватным.Поэтому, если вы предоставляете только приватный конструктор, у вас нет возможности инициализировать класс за пределами его области действия.

0 голосов
/ 27 декабря 2018

Как написано в этой статье :

Использование частного конструктора заключается в обслуживании одноэлементных классов.Класс Singleton - это класс, который ограничивает количество создаваемых объектов одним.Используя приватный конструктор, мы можем гарантировать, что одновременно может быть создано не более одного объекта.Предоставляя частный конструктор, вы предотвращаете создание экземпляров класса в любом месте, кроме этого самого класса.

Посмотрите более подробно на статью, у них есть примеры использования частных конструкторов в Java.

0 голосов
/ 27 декабря 2018

Ключевое слово new вызывает конструктор класса.Если это личное, вы не сможете создать новый объект из другого класса.

Вы только что создали Singleton .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...