Внедрение окончательного класса без ключевого слова "final"

Мой друг был задан этот вопрос в интервью о работе на телефоне через пару дней. У меня нет подсказки. может ли кто-нибудь предложить решение? (Его собеседование закончилось, просто из любопытства) 10x.

Ответ 1

  • Отметьте конструктор как закрытый
  • Предоставить статический метод для класса для создания экземпляра класса. Это позволит вам создавать объекты этого класса

Ответ 2

Я не знаю, что они означают в точности как класс final. Если они означают класс, который не может быть расширен по наследству, чем это явно невозможно сделать, за исключением того, что он помечен классом с final (или запечатанным или любым ключевым словом для языка).

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

Ответ 3

Создать частный конструктор без параметров?

public class Base
{
    private Base()
    {
    }
}

public class Derived : Base
{
//Cannot access private constructor here error
}

Ответ 4

Сделать все конструкторы этого класса приватными, чтобы прекратить наследование, хотя и не рекомендуется.

Ответ 5

public class Immutable {       
    private int val;

    public Immutable(int v)
    { 
        this.val = v;
    }

    public int getVal() { return this.val; }
}

Ответ 6

Вы можете сделать свой класс неизменным без использования ключевого слова final как:

  1. Сделайте экземпляр переменной закрытым.
  2. Сделайте конструктор приватным.
  3. Создайте метод фабрики, который будет возвращать экземпляр этого класса.

Я предоставляю неизменный класс здесь на Java.

class Immutable {
    private int i;
    private Immutable(int i){
     this.i = i;
    }
    public static Immutable createInstance(int i){
         return new Immutable(i);
    }
    public int getI(){return i;}
}
 class Main {
    public static void main(string args[]){
       Immutable obj = Immutable.createInstance(5);
    }
}

Ответ 7

Статические классы не могут быть унаследованы от