Мой друг был задан этот вопрос в интервью о работе на телефоне через пару дней. У меня нет подсказки. может ли кто-нибудь предложить решение? (Его собеседование закончилось, просто из любопытства) 10x.
Внедрение окончательного класса без ключевого слова "final"
Ответ 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 как:
- Сделайте экземпляр переменной закрытым.
- Сделайте конструктор приватным.
- Создайте метод фабрики, который будет возвращать экземпляр этого класса.
Я предоставляю неизменный класс здесь на 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
Статические классы не могут быть унаследованы от