Hogyan használjuk a Java final-t osztályok, módszerek és változók esetében?
A final kulcsszót a Java nyelvben olyan elemek létrehozására használják, amelyek nem módosíthatók. Ez a módosító osztályokra, módszerekre és változókra alkalmazható. Különösen a kódon belüli hibák és szándékos visszaélések megelőzésére használják.
Mi az a Java final?
A legtöbb programozási nyelv lehetővé teszi a meglévő kódok tetszés szerinti módosítását és bővítését. Java-ban ez szintén lehetséges, de vannak olyan esetek, amikor elengedhetetlen, hogy egy elem megváltoztathatatlannak legyen kijelölve. Java-ban ezt a final módosítóval lehet megtenni. Ez a módosító egy osztály, egy metódus vagy egy változó hozzáférésének korlátozására szolgál. Ha egy változót véglegesnek nyilvánítanak, annak értéke nem módosítható. A végleges osztály nem bővíthető, a végleges metódus pedig nem írható felül. Ez segít megelőzni a kódrész helytelen használatát.
Záróórák
Ha Java final használsz egy osztályhoz, akkor az már nem bővíthető. Ez a megközelítés nagyon gyakori, és sok esetben az alosztályok levezetésének megakadályozására használják. Ez vonatkozik az olyan alapvető adattípusokra is, mint java.lang.Math vagy java.lang.String, amelyeket mindig véglegesnek nyilvánítanak. Még ha más okokból szeretnéd megakadályozni a fő osztály alosztályainak levezetését, akkor is a Java final használata a legjobb megoldás. A következő példában létrehozunk egy végleges osztályt és egy második osztályt, amely elméletileg kiterjeszti azt. Ezután következik a fő osztály a fő módszerrel.
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();
}
}javaA kapott kimenetnek körülbelül így kell kinéznie:
Main.java:6: error: cannot inherit from final FinalClass
class AdditionalClass extends FinalClass
^
1 errorjavaVégső módszerek
Ha egy metódust véglegesnek jelöl, akkor az nem írható felül. Ez biztosítja, hogy egy alosztályban lévő metódus ne változtathassa meg a tervezett viselkedését. Ehhez a metódust a Java final módosítóval kell deklarálni. Vegyünk például egy „Emperor” nevű osztályt, amely tartalmaz egy „myTitle” nevű végleges metódust. Egy másik osztály, a „King”, amely kiterjeszti az „Emperor” osztályt, megpróbálja felülírni a „myTitle” metódust. A fő metódusban a „Prince” osztály egy példányát használjuk a metódus eléréséhez. A kód a következőképpen néz ki:
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();
}
}javaHa most alkalmazza ezt a kódot, hibaüzenetet kap:
Main.java:9: error myTitle() in King cannot override myTitle() in Emperor public final void myTitle() {
^
overridden method is finaljavaVégső változók
final Java final olyan változók létrehozására is használják, amelyek értékei később nem módosíthatók. Ez különösen fontos, ha bizonyos változóknak állandónak kell maradniuk a kódon belül. A következő példában létrehozunk egy x változót, amelynek értéke 5. Ezután megpróbáljuk beilleszteni ezt a változót, és új értéket rendelünk hozzá. A kód így néz ki:
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);
}
}javaAmikor a Java System.out.println parancsot használjuk az eredmény megjelenítéséhez, a következő hibaüzenetet kapjuk:
Main.java:6: error: cannot assign a value to final variable x
newValue.x = 10;
^
1 errorjavaÜres végleges változók létrehozása
A változókat Java-ban mindig inicializálni kell. Ha azonban üres végleges változót deklarál, akkor azt osztálykonstruktorral inicializálhatja. A kód így néz ki:
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);
}
}javaHa végrehajtja ezt a kódot, a következő mondat jelenik meg kimenetként:
Here is your message.java