b'\n_START_ARTICLE_\nFinal (Java)\n_START_PARAGRAPH_\nfinal \xe2\x80\x93 s\xc5\x82owo kluczowe w j\xc4\x99zyku programowania Java, kt\xc3\xb3re zale\xc5\xbcnie od u\xc5\xbcytego kontekstu oznacza niezmienno\xc5\x9b\xc4\x87 deklarowanego elementu.\n_START_SECTION_\nZmienne finalne\n_START_PARAGRAPH_\nZmiennej finalnej mo\xc5\xbcna tylko raz przypisa\xc4\x87 warto\xc5\x9b\xc4\x87 co z regu\xc5\x82y ma miejsce podczas jej deklaracji. Nale\xc5\xbcy zwr\xc3\xb3ci\xc4\x87 uwag\xc4\x99, \xc5\xbce w przypadku zmiennej reprezentuj\xc4\x85cej obiekt warto\xc5\x9bci\xc4\x85 tej zmiennej jest warto\xc5\x9b\xc4\x87 tej referencji \xe2\x80\x93 nie za\xc5\x9b sam obiekt. Oznacza to, \xc5\xbce oznaczenie referencji jako finalnej nie oznacza, \xc5\xbce stan obiektu na kt\xc3\xb3ry ta referencja wskazuje nie mo\xc5\xbce zosta\xc4\x87 zmieniony, a jedynie \xc5\xbce samej zmiennej nie mo\xc5\xbcna przypisa\xc4\x87 drugi raz referencji do obiektu \xe2\x80\x93 cho\xc4\x87by nawet tego samego._NEWLINE_Przyk\xc5\x82ad:_NEWLINE_public class MyProgram {_NEWLINE__NEWLINE_  public static void main( String[] args ) {_NEWLINE_    // Deklaracja zmiennej finalnej i przypisanie warto\xc5\x9bci_NEWLINE_    final int x = 2;_NEWLINE__NEWLINE_    // Niepoprawne: pr\xc3\xb3ba ponownego przypisania warto\xc5\x9bci._NEWLINE_    // x = 6;_NEWLINE__NEWLINE_    final Sphere s;_NEWLINE_    s = new Sphere( 1 );_NEWLINE__NEWLINE_    // Zmiana stanu obiektu - poprawne gdy\xc5\xbc final nie dotyczy niezmienno\xc5\x9bci stanu obiektu_NEWLINE_    s.radius = 123;_NEWLINE__NEWLINE_    // Niepoprawne - pr\xc3\xb3ba ponownego przypisania warto\xc5\x9bci polu finalnemu w klasie Sphere:_NEWLINE_    // s.id = 2;_NEWLINE__NEWLINE_    // Niepoprawne pr\xc3\xb3ba ponownego przypisania referencji innego obiektu zmiennej lokalnej s_NEWLINE_    // s = new Sphere( 3 );_NEWLINE_    }}class Sphere {_NEWLINE_    public float radius;_NEWLINE_    public final int id;_NEWLINE_    public Sphere( int givenId ) {_NEWLINE_        // Przypisanie warto\xc5\x9bci polu finalnemu w klasie_NEWLINE_        this.id = givenId;_NEWLINE_    }}\n_START_SECTION_\nMetody finalne\n_START_PARAGRAPH_\nPoniewa\xc5\xbc w Javie wszystkie metody s\xc4\x85 domy\xc5\x9blnie wirtualne, implementacja ka\xc5\xbcdej z nich mo\xc5\xbce zosta\xc4\x87 podana lub zmieniona w klasach pochodnych. W celu zablokowania takiej mo\xc5\xbcliwo\xc5\x9bci nale\xc5\xbcy metod\xc4\x99 zadeklarowa\xc4\x87 jako finaln\xc4\x85. Oznacza to, \xc5\xbce nie mo\xc5\xbce ona zosta\xc4\x87 zaimplementowana w klasie pochodnej a jej implementacja musi zosta\xc4\x87 podana w klasie w kt\xc3\xb3rej zosta\xc5\x82a zadeklarowana. Decyzja o zadeklarowaniu metody jako finalnej mo\xc5\xbce by\xc4\x87 podyktowana tym aby zapobiec niespodziewanemu zachowaniu si\xc4\x99 metody w podklasach zachowuj\xc4\x85c w ten spos\xc3\xb3b sp\xc3\xb3jno\xc5\x9b\xc4\x87 ca\xc5\x82ej klasy._NEWLINE_Przyk\xc5\x82ad:_NEWLINE_public class MyClass {_NEWLINE_    public void myRegularMethod() {_NEWLINE_        System.out.println("Jestem w myRegularMethod klasy MyClass");_NEWLINE_    }_NEWLINE_    public final void myFinalMethod() {_NEWLINE_        System.out.println("Jestem w myFinalMethod klasy MyClass");_NEWLINE_    }}public class MySubClass extends MyClass {_NEWLINE_    public void myRegularMethod() {_NEWLINE_        System.out.println("Jestem w myRegularMethod klasy MySubClass");_NEWLINE_    }_NEWLINE__NEWLINE_    // Niepoprawne - nie mo\xc5\xbcna zaimplementowa\xc4\x87 metody finalnej w podklasie:_NEWLINE_    // public final void myFinalMethod() {_NEWLINE_    //     System.out.println("Jestem w myFinalMethod klasy MySubClass");_NEWLINE_    // }}\n_START_SECTION_\nKlasy finalne\n_START_PARAGRAPH_\nZadeklarowanie klasy jako finalnej oznacza, \xc5\xbce nie mo\xc5\xbce by\xc4\x87 ona dziedziczona przez inne klasy co mo\xc5\xbce by\xc4\x87 podyktowane wzgl\xc4\x99dami bezpiecze\xc5\x84stwa lub efektywno\xc5\x9bci. Wiele standardowych klas Javy jest klasami finalnymi np.: java.lang.System i java.lang.String. Wszystkie metody w klasie finalnej s\xc4\x85 automatycznie finalne._NEWLINE_Przyk\xc5\x82ad:_NEWLINE_// Klasa finalna:public final class FinalPoint {_NEWLINE_    public final int x;_NEWLINE_    public final int y;}// Niepoprawne - klasa pr\xc3\xb3buje dziedziczy\xc4\x87 po klasie finalnej:// public class 3DPoint extends FinalPoint {//     public final int z;// }_NEWLINE_Klasa 3DPoint jest b\xc5\x82\xc4\x99dnie zadeklarowana poniewa\xc5\xbc pr\xc3\xb3buje dziedziczy\xc4\x87 po klasie finalnej, co spowoduje b\xc5\x82\xc4\x85d kompilacji.'