Ключевое слово final
имеет несколько применений в Java. Он соответствует ключевым словам sealed
и readonly
в C #, в зависимости от контекста, в котором он используется.
Классы
Чтобы предотвратить создание подклассов (наследование от определенного класса):
Java
public final class MyFinalClass {...}
C #
public sealed class MyFinalClass {...}
Методы
Предотвращение переопределения метода virtual
.
Java
public class MyClass
{
public final void myFinalMethod() {...}
}
C #
public class MyClass : MyBaseClass
{
public sealed override void MyFinalMethod() {...}
}
Как отмечает Йоахим Зауэр, заметное различие между этими двумя языками заключается в том, что Java по умолчанию помечает все нестатические методы как virtual
, тогда как C # помечает их как sealed
. Следовательно, вам нужно использовать ключевое слово sealed
в C # только в том случае, если вы хотите прекратить дальнейшее переопределение метода, который был явно помечен virtual
в базовом классе.
Переменные
Чтобы разрешить присвоение переменной только один раз:
Java
public final double pi = 3.14; // essentially a constant
C #
public readonly double pi = 3.14; // essentially a constant
В качестве дополнительного примечания эффект ключевого слова readonly
отличается от эффекта ключевого слова const
тем, что выражение readonly
оценивается в время выполнения , а не время компиляции , что позволяет использовать произвольные выражения.