В данной статье приведены основные способы применения ключевого слова final в программировании Java. Краткие четкие описания ситуации применения помогут быстро усвоить материал.
Ключевое слово final имеет различные интерпретации в зависимости от того, в каком месте программы оно используется. Но суть этого слова одна — запрет на изменение. По сути, применяя данное слово к одной из сущности языка Java: переменной, объекту, методу или классу, — мы делаем из нее константу, стабильную и неизменяемую величину, как прическа у певца Иосифа Кобзона...
Напомню краткое определение константы.
Константа — постоянная величина (скалярная или векторная) в математике, физике, химии.
Математическая константа — величина, значение которой не меняется; в этом она противоположна переменной.
Рассмотрим 4 случая, когда мы можем применить слово final.
1. Создание константы примитивного типа данных.
Здесь значение MY_CONST нельзя изменить. Таким образом, если написать слово final возле примитивной переменной, то она является константой.
public class MyClass{
public final int MY_CONST = 13;
}
2. Создание константы ссылочного типа.
Данный код не будет вызывать ошибки, но только до тех пор, пока не присвоить новое значение переменной s1. То есть слово final для ссылочных типов запрещает изменение ссылки, а не объекта, на который указывает ссылка. Также стоит отметить, что присваивание допустимо в любом месте программы, но только один раз.
public class MyClass2{
public final String s1;
public MyClass2() {
s1 = new String();
}
}
3. Запрет на переопределение метода в классе-наследнике
Слово final возле метода запрещает переопределение этого метода в классах-наследниках.
public class Example{
public final void hello() {
System.out.println(“Hello my people!”);
}
}
То есть, если создать класс-наследник от Example и написать в нем следующий код, то произойдет ошибка:
public class ExtendedExample extends Example{
public void hello() {
System.out.println("Extended hello everyone!!!");
}
}
4. Запрет создание класса наследника
Финальный класс — это класс, который не может быть суперклассом, то есть запрещается писать для него наследников.
public final class MyClass3 {
}
Автор: Ирина Волгина
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ