# Kuidas kasutada Java final klasside, meetodite ja muutujate puhul

Märksõna `final` kasutatakse Java-s muutumatute elementide loomiseks. Seda modifikaatorit saab rakendada klassidele, meetoditele ja muutujatele. Eelkõige kasutatakse seda vea ja tahtliku väärkasutuse vältimiseks koodis.

## Mis on Java `final`?

Enamik programmeerimiskeeli võimaldab olemasolevat koodi soovi korral muuta ja laiendada. Java keeles on see samuti võimalik, kuid on juhtumeid, kus on oluline, et element oleks **määratud muutumatuks**. Java keeles saab seda teha modifikaatori `final` abil. Seda modifikaatorit kasutatakse klassi, meetodi või muutuja juurdepääsu piiramiseks. Kui muutuja on deklareeritud lõplikuks, ei saa selle väärtust muuta. Lõplikku klassi ei saa laiendada ja lõplikku meetodit ei saa ümber kirjutada. See aitab kaitsta koodi selle osa väärkasutamise eest.

## Lõplikud tunnid

Kui kasutate klassi jaoks Java `final`, ei saa seda enam laiendada. See lähenemisviis on väga levinud ja paljudel juhtudel kasutatakse **seda alamklassi tuletamise** vältimiseks. See kehtib põhiliste andmetüüpide kohta, nagu `java.lang.Math` või `java.lang.String`, mis on alati deklareeritud lõplikena. Isegi kui soovite muudel põhjustel vältida põhiklassi alamklasside tuletamist, on Java `final` kasutamine parim viis. Järgmises näites loome lõpliku klassi ja teise klassi, mis peaks teoreetiliselt seda laiendama. Pärast seda tuleb põhiklass koos põhimeetodiga.

```java
final class FinalClass {
	public void exampleMethod() {
		System.out.println("This is a method within the final class.");
	}
}
class AdditionalClass extends FinalClass {
	public void exampleMethod() {
		System.out.println("The method is now also available in the additional class.");
	}
}
public class Main {
	public static void main(String[] args) {
		AdditionalClass ourAdditionalClass = new AdditionalClass();
		ourAdditionalClass.exampleMethod();
	}
}
```

Saadud väljund peaks olema umbes selline:

```java
Main.java:6: error: cannot inherit from final FinalClass
class AdditionalClass extends FinalClass
       ^
1 error
```

## Lõplikud meetodid

Kui märgistate meetodi lõplikuks, ei saa seda ümber kirjutada. See tagab, et alamklassi meetod ei saa muuta oma kavandatud käitumist. Selle saavutamiseks deklareerige meetod Java `final` modifikaatoriga. Võtame näiteks klassi nimega „Emperor”, mis sisaldab lõplikku meetodit nimega „myTitle”. Teine klass „King”, mis laiendab „Emperor”, üritab meetodit „myTitle” ümber kirjutada. Peameetodis kasutame meetodile juurdepääsuks „Prince” instantsi. Kood on järgmine:

```java
public class Emperor {
	public final void myTitle() {
		System.out.println("I am the emperor.");
	}
}
public class King extends Emperor {
	public final void myTitle() {
		System.out.println("I am the king.");
	}
}
public class Prince {
	public static void main(String[] args) {
		King myTitle = new King();
		King.myTitle();
	}
}
```

Kui te nüüd seda koodi rakendate, saate veateate:

```java
Main.java:9: error myTitle() in King cannot override myTitle() in Emperor public final void myTitle() {
		^
overridden method is final
```

## Lõplikud muutujad

Java `final` kasutatakse ka muutujate loomiseks, **mille väärtusi ei saa hiljem muuta**. See on eriti oluline, kui teatud muutujad peavad koodis jääma konstantseks. Järgmises näites loome muutuja x, mille väärtus on 5. Seejärel proovime seda muutujat lisada ja määrata sellele uue väärtuse. Kood näeb välja järgmine:

```java
public class Main {
	final int x = 5;
public static void main(String[] args) {
	Main newValue = new Main();
	newValue.x = 10;
	System.out.println(newValue.x);
	}
}
```

Kui kasutame Java-käsku `System.out.println` tulemuse kuvamiseks, saame järgmise veateate:

```java
Main.java:6: error: cannot assign a value to final variable x
	newValue.x = 10;
		     ^
1 error
```

### Loo tühjad lõplikud muutujad

Java-s tuleb muutujad alati initsialiseerida. Kui aga deklareerite tühi lõpliku muutuja, saate selle initsialiseerida klassi konstruktoriga. Kood näeb välja järgmine:

```java
public class Example {
	final String exampleText;
	Example() {
		exampleText = "Here is your message.";
	}
	public static void main(String[] args) {
		Example newObject = new Example();
		System.out.println(newObject.exampleText);
	}
}
```

Kui te selle koodi käivitate, saate väljundina järgmise lause:

```java
Here is your message.
```


This is a markdown version of: [https://www.ionos.com/et-ee/digitalguide/veebisaidid/veebiarendus/java-loplik/](https://www.ionos.com/et-ee/digitalguide/veebisaidid/veebiarendus/java-loplik/) for AI/LLM consumption.