Предотвращение создания и наследования Java-класса - PullRequest
0 голосов
/ 28 июня 2019

Меня попросили изменить простой класс, чтобы его нельзя было создать и наследовать.Я запутался в том, как использовать abstract для того, чтобы его не создавать, и final для того, чтобы его не наследовать.

Как мне написать такой класс?

Заранее спасибо.

Ответы [ 3 ]

9 голосов
/ 28 июня 2019

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

Это выглядит так:

final class MyClass {
    private MyClass() {
        throw new IllegalStateException("Cannot be instantiated"); //some exception
    }
}
4 голосов
/ 28 июня 2019
// final can not be inherited
// only static methods will work on this class
final class FrozenClass {
  private FrozenClass() {
    // can not be instantiated
  }
}
2 голосов
/ 28 июня 2019

По этой причине вы должны сделать свой класс окончательным и добавить приватный конструктор: посмотрите на этот пример:

final class  uninstantiable {
    private uninstantiable() {
    }
}

, поэтому теперь, когда вы пытаетесь создать экземпляр нового объекта, он будет ошибаться classname имеет личный доступ в packagename.

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