Final (Java)

finalsłowo kluczowe w języku programowania Java, które zależnie od użytego kontekstu oznacza niezmienność deklarowanego elementu.

Zmienne finalne

Zmiennej finalnej można tylko raz przypisać wartość co z reguły ma miejsce podczas jej deklaracji. Należy zwrócić uwagę, że w przypadku zmiennej reprezentującej obiekt wartością tej zmiennej jest wartość tej referencji – nie zaś sam obiekt. Oznacza to, że oznaczenie referencji jako finalnej nie oznacza, że stan obiektu na który ta referencja wskazuje nie może zostać zmieniony, a jedynie że samej zmiennej nie można przypisać drugi raz referencji do obiektu – choćby nawet tego samego.

Przykład:

public class MyProgram {

  public static void main( String[] args ) {
    // Deklaracja zmiennej finalnej i przypisanie wartości
    final int x = 2;

    // Niepoprawne: próba ponownego przypisania wartości.
    // x = 6;

    final Sphere s;
    s = new Sphere( 1 );

    // Zmiana stanu obiektu - poprawne gdyż final nie dotyczy niezmienności stanu obiektu
    s.radius = 123;

    // Niepoprawne - próba ponownego przypisania wartości polu finalnemu w klasie Sphere:
    // s.id = 2;

    // Niepoprawne próba ponownego przypisania referencji innego obiektu zmiennej lokalnej s
    // s = new Sphere( 3 );
    }

}

class Sphere {
    public float radius;
    public final int id;
    public Sphere( int givenId ) {
        // Przypisanie wartości polu finalnemu w klasie
        this.id = givenId;
    }
}

Metody finalne

Ponieważ w Javie wszystkie metody są domyślnie wirtualne, implementacja każdej z nich może zostać podana lub zmieniona w klasach pochodnych. W celu zablokowania takiej możliwości należy metodę zadeklarować jako finalną. Oznacza to, że nie może ona zostać zaimplementowana w klasie pochodnej a jej implementacja musi zostać podana w klasie w której została zadeklarowana. Decyzja o zadeklarowaniu metody jako finalnej może być podyktowana tym aby zapobiec niespodziewanemu zachowaniu się metody w podklasach zachowując w ten sposób spójność całej klasy.

Przykład:

public class MyClass {
    public void myRegularMethod() {
        System.out.println("Jestem w myRegularMethod klasy MyClass");
    }
    public final void myFinalMethod() {
        System.out.println("Jestem w myFinalMethod klasy MyClass");
    }
}

public class MySubClass extends MyClass {
    public void myRegularMethod() {
        System.out.println("Jestem w myRegularMethod klasy MySubClass");
    }

    // Niepoprawne - nie można zaimplementować metody finalnej w podklasie:
    // public final void myFinalMethod() {
    //     System.out.println("Jestem w myFinalMethod klasy MySubClass");
    // }
}

Klasy finalne

Zadeklarowanie klasy jako finalnej oznacza, że nie może być ona dziedziczona przez inne klasy co może być podyktowane względami bezpieczeństwa lub efektywności. Wiele standardowych klas Javy jest klasami finalnymi np.: java.lang.System i java.lang.String. Wszystkie metody w klasie finalnej są automatycznie finalne.

Przykład:

// Klasa finalna:
public final class FinalPoint {
    public final int x;
    public final int y;
}

// Niepoprawne - klasa próbuje dziedziczyć po klasie finalnej:
// public class 3DPoint extends FinalPoint {
//     public final int z;
// }

Klasa 3DPoint jest błędnie zadeklarowana ponieważ próbuje dziedziczyć po klasie finalnej, co spowoduje błąd kompilacji.

Linki zewnętrzne

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.
Kembali kehalaman sebelumnya