Wprowadzenie do końcowego słowa kluczowego w Javie

W tym poście przyjrzymy się końcowemu słowu kluczowemu dla java. Jest to słowo kluczowe używane w języku Java w celu nałożenia ograniczeń na jego użycie lub modyfikację przez inne klasy lub zmienne. Za pomocą tego słowa kluczowego mówi się tłumaczowi, aby nie zezwalał na jakiekolwiek przyszłe modyfikacje tej zmiennej lub metody i traktował ją jako stałą. Może być używany z mniej niż 3 scenariuszami: -

  1. Zmienna: Zadeklarowanie zmiennej jako ostatecznej ogranicza jej modyfikację do odwoływania się do dowolnej innej wartości lub odwołania.
  2. Metody: Zadeklarowanie metody jako ostatecznej ogranicza przesłanianie metody w klasach potomnych.
  3. Klasy: Deklaracja klasy jako końcowej zapobiega dziedziczeniu tej klasy.

Te słowa kluczowe zawsze zaleca się deklarować dużymi literami zgodnie z dobrą praktyką kodowania.

Składnia końcowego słowa kluczowego w Javie

Tego słowa kluczowego można użyć na 3 sposoby: -

1. Zmienna

Zmienne w Javie można zadeklarować jako zmienne, aby ograniczyć wszelkie zmiany ich wartości. Można go zadeklarować na jeden z trzech poniższych sposobów:

Składnia:

final int VAR1=21;//final variable
final int VAR2; //blank final variable
static final double DUMMY= 45.504;//final static variable
static final double PK;//blank final static variable

Uwaga - Zmienne odniesienia można również zadeklarować jako statyczne, aby nie mogły zawierać odniesienia do innego obiektu. Ale ze względu na wewnętrzny charakter obiektu odwołanie do obiektu może zostać zmienione.

końcowy konstruktor ciągów sb = new StringBuilder („LetsLearn”);

2. Metody

Metodę zadeklarowaną za pomocą ostatniego słowa kluczowego uważa się za metodę końcową. Ostatecznej metody nie można zastąpić jej klasą potomną, co oznacza, że ​​metoda klasy potomnej nie może zmienić definicji ostatecznej metody obecnej w klasie nadrzędnej. Jeśli chcemy, aby implementacja metody zdefiniowanej w klasie nadrzędnej była przestrzegana we wszystkich jej klasach potomnych, musimy zadeklarować tę metodę jako ostateczną.

Składnia:

final int my1()(
//method defination
)

3. Klasy

Końcowych słów kluczowych można również używać z klasami, aby uczynić z nich klasę końcową, co oznacza, że ​​dana klasa nie może być rozszerzana ani dziedziczona przez inne klasy.

Składnia:

final class myClass(
/member variables and member functions.
)

Jak działa końcowe słowo kluczowe w Javie?

Ostatnie słowo kluczowe pomaga ograniczyć przesłonięcie klas, członków lub zmiennych podczas dziedziczenia.

1. Ostateczne zmienne

Zadeklarowanie zmiennej jako ostatecznej oznacza ograniczenie jakiejkolwiek zmiany wartości zmiennej w odziedziczonych klasach. Ostatnią zmienną można zainicjować tylko raz i należy jej używać w takiej postaci, w jakiej należy, dlatego należy zainicjować zmienną końcową. Najczęściej jest używany ze statycznym do tworzenia stałej zmiennej klasy.

Na przykład:

final int a =0;

Możemy również zadeklarować zmienne referencyjne jako końcowe, w tym przypadku jedna zmienna referencyjna nie może odnosić się do różnych obiektów. Ale w java wewnętrzny stan obiektu można zmienić, do którego odwołuje się końcowa zmienna referencyjna. W ten sposób możemy wprowadzić zmiany wartości zmiennej referencyjnej. Jest to takie samo, jak przy użyciu końcowych tablic, jak pokazano poniżej:

Kod:

class MyClass
(
public static void main(String args())
(
final int myarr() = (1, 2, 3, 4, 5);
for (int q = 0; q < myarr.length; q++)
(
myarr (q) = myarr (q)*10;
System.out.println(myarr (q));
)
)
)

Wynik:

Wyjaśnienie

W tym przypadku tablica a1 odnosi się do tego samego obiektu, zmienia się tylko wartość tego obiektu, ponieważ wszyscy wiemy, że zmienna tablicy zawiera tylko początkowy adres miejsca w pamięci, w którym przechowywane są te elementy tablicy.

I tak samo, jeśli spróbujemy odwołać się do innej tablicy przy użyciu tej samej zmiennej tablicowej a1, wówczas kompilator zgłosi błąd. Zatem użycie tutaj tablicy końcowej słowa oznacza, że ​​można wprowadzić dowolne zmiany w elemencie tablicy, ale zmienna nie może odnosić się do żadnego innego obiektu.

Rzeczy do zapamiętania

Zainicjowanie końcowej zmiennej jest konieczne, aby uniknąć błędu czasu kompilacji. Istnieje różnica między stałymi zmiennymi C ++ a tymi zmiennymi końcowymi, że zmienne const nie muszą być inicjowane. Istnieją trzy sposoby inicjalizacji końcowej zmiennej -

  • Zainicjuj w momencie samej deklaracji : Możemy łatwo zadeklarować zmienną końcową w momencie jej deklaracji. W przypadku, gdy nie zostanie zainicjowana, zmienna ta jest uważana za pustą zmienną końcową, a jeden z dwóch następnych sposobów może pomóc nam w inicjalizacji pustej zmiennej końcowej.
  • Korzystanie z bloku inicjalizującego instancję : W tym bloku lub konstruktorze można łatwo zainicjować pustą zmienną końcową. Używając konstruktora do inicjalizacji, zawsze pamiętaj o inicjalizacji konkretnej zmiennej we wszystkich dostępnych konstruktorach.
  • Blok statyczny: Można również użyć bloku statycznego do zainicjowania pustej zmiennej końcowej. Blok statyczny jest zawsze wyzwalany raz dla każdej klasy, dlatego wartość zmiennej, której wartości nie powinny być zmieniane, można łatwo zainicjować za pomocą tego bloku.

Zatem słowo kluczowe końcowe jest używane tylko dla tych zmiennych, które nie muszą zmieniać swojej wartości podczas wykonywania programu. Wszystkie końcowe zmienne utworzone w metodzie lub bloku muszą zostać zainicjowane w niej samej. Takie zmienne typu są znane jako lokalne zmienne końcowe.

Wyjaśnienie

W poniższym przykładzie zmienna i została zadeklarowana w ramach funkcji głównej i dlatego również została zainicjowana i jest traktowana jako końcowa zmienna lokalna.

Kod:

class myClass
(
public static void main(String args())
(
// local final variable
final int i;
i = 20;
System.out.println(i);
)
)

Wynik:

2. Ostateczne metody

Metoda zadeklarowana jako ostateczna nie może zostać zastąpiona w żadnej z podklas, dlatego jest nazywana metodą ostateczną. Metodę należy zadeklarować jako ostateczną, jeśli wymagamy, aby po tej samej implementacji klasy następowały klasy potomne.

Uwaga - Nie jest konieczne, aby ostateczne metody były zadeklarowane w początkowej fazie dziedziczenia (klasa podstawowa). Metodę można zadeklarować jako końcową w dowolnej podklasie, w której chcemy, aby dalsze podklasy były zgodne z tą samą definicją.

Kod:

class A(
void myMethod()(
//method definition
)
)
class B extends A(
final void myMethod()(
//overrides the method in parent class
//runs successfully
)
)
class C extends B(
void myMethod()(
//will throw error
)
)

3. Klasy końcowe

Klasy zadeklarowane jako końcowe nie mogą być dziedziczone przez inne klasy. Wzmianka o ostatnim słowie kluczowym przed nazwą klasy informuje kompilator, że definicji tej klasy można używać tylko taką, jaka jest. Żadna inna klasa nie może dodać swoich specyfikacji do tej definicji ani ponownie użyć jej kodu. W przypadku próby rozszerzenia klasy końcowej kompilator zgłasza błąd wskazujący, że klasa ta nie jest przeznaczona do rozszerzenia. Można użyć końcowych słów kluczowych w Javie w dowolnym celu poniżej 2 celów: -

  1. Pierwszym z nich jest zapobieganie dziedziczeniu tej klasy. Na przykład - wszystkie klasy Wrapper obecne w pakiecie java.lang są klasami końcowymi, dlatego nie możemy rozszerzyć ich w naszych klasach, ale możemy z nich korzystać, deklarując swoje obiekty. Każda próba uzyskania dostępu do tych klas spowoduje błąd kompilatora.

final class myParentClass
(
// member variables and member functions
)
// illegal extend.
class myChildClass extends parentClass
(
// Can't subclass A
)

  1. Drugie użycie finału z klasami ma miejsce, gdy trzeba stworzyć niezmienną klasę, tzn. Gdy obiekt klasy zostanie utworzony, nie możemy zmienić jego zawartości jak predefiniowana klasa String. Klasa musi zostać zadeklarowana jako ostateczna, aby była niezmienna.

Uwaga :

  • Jeśli klasa jest zadeklarowana jako końcowa, wówczas jej zmienne składowe i funkcje składowe są również uznawane przez kompilator za ostateczne.
  • Klasy nie można uznać za abstrakcyjną, jeśli zależy od klas potomnych do uzupełnienia definicji, a także do definicji końcowej, co uniemożliwia samo dziedziczenie.

Przykłady końcowego słowa kluczowego w Javie

Poniżej znajduje się inny przykład końcowego słowa kluczowego w Javie:

1. Używanie zmiennej końcowej

W poniższym przykładzie różne zmienne są inicjowane przy użyciu różnych metod. Na przykład zmienna SECOND jest inicjowana za pomocą konstruktora, natomiast THIRD jest inicjowana za pomocą inicjatora.

Kod:

class myClass
(
final int FIRST = 5;
// a blank final variable
final int SECOND;
// another blank final variable
final int THIRD;
FIRST =10; //illegal attempt to change the value of final variable
// a final static variable PI
// direct initialize
static final double MINVALUE = 3.141592653589793;
// a blank final static variable
static final double MAXRANGE;
(
THIRD = 25; // initializer block
)
static(
MAXRANGE = 200.3;
)
public myClass()
(
SECOND = -1;//needs to be initialised in every constructor
)
)

Wynik:

2. Korzystanie z ostatecznych metod

W poniższym przykładzie klasa abstrakcyjna myShape deklaruje końcowe metody getWidth, a get osiem nie musi być zastępowane przez odziedziczone klasy. Deklaruje również jedną funkcję abstrakcyjną, której implementacja jest obowiązkowa w kolejnych klasach. Zatem jedyna definicja funkcji abstrakcyjnej jest zaimplementowana zarówno w pierwszej klasie potomnej, jak i drugiej klasie potomnej.

Kod:

abstract class myShape
(
private double width;
private double height;
public myShape(double width, double height)
(
this.width = width;
this.height = height;
)
public final double getWidth() //override not allowed
(
return width;
)
public final double getHeight() //override not allowed
(
return height;
)
abstract double getArea(); //needs to be defined in the child class
)
class firstChildClass extends myShape
(
public firstChildClass(double width, double height)
(
super(width, height);
)
final double getArea()
(
return this.getHeight() * this.getWidth();
)
)
class secondChildClass extends myShape
(
public secondChildClass(double side)
(
super(side, side);
)
final double getArea()
(
return this.getHeight() * this.getWidth();
)
)
public class myClass
(
public static void main(String() args)
(
myShape s1 = new firstChildClass(10, 20);
myShape s2 = new secondChildClass(10);
System.out.println("width of s1 : "+ s1.getWidth());
System.out.println("height of s1 : "+ s1.getHeight());
System.out.println("width of s2 : "+ s2.getWidth());
System.out.println("height of s2 : "+ s2.getHeight());
System.out.println("area of s1 : "+ s1.getArea());
System.out.println("area of s2 : "+ s2.getArea());
)
)

Wynik:

3. Używanie klas końcowych

W poniższym programie używamy ostatniej klasy Bryły, która definiuje metodę obliczania objętości kształtu przy użyciu jego wymiarów, ale wyświetlanie objętości pudełka odbywa się za pomocą funkcji printVol w klasie odziedziczonej. Shape As Solid jest klasą końcową, dlatego klasa Shape nie będzie mogła go rozszerzać (ani dziedziczyć). Dlatego używa obiektu Shape do obliczenia objętości dowolnego z Shape, po prostu przekazując argumenty do funkcji.

Kod:

final class Solid (
public double getVol(double length, double width, double height) (
return length * width * height;
)
)
class Shape (
private float length;
private float width;
private float height;
Shape(float length, float width, float height) (
this.length = length;
this.width = width;
this.height = height;
)
public void printVol(Solid bObj) (
double volume = bObj.getVol(this.length, this.width, this.height);
System.out.println("Volume of the Shape: " + volume);
)
)
public class myClass (
public static void main(String() args) (
Solid bObj = new Solid();
Shape obj = new Shape(5, 4, 3);
obj.printVol(bObj);
)
)

Wynik:

Wniosek

Ostatnie słowo kluczowe służy do zapobiegania zastępowaniu klas, zmiennych i metod przez ich klasy potomne. Można go również wykorzystać do uczynienia klas niezmiennymi, co ogranicza zmianę wartości ich obiektów. Ostateczne sprawdzenie słów kluczowych jest zawsze sprawdzane tylko w czasie kompilacji. Jest to świetne narzędzie do zapobiegania ponownemu wykorzystaniu zdefiniowanych zmiennych, logiki i klas.

Polecane artykuły

Jest to przewodnik po przykładzie końcowego słowa kluczowego w Javie. Tutaj omawiamy, jak działa ostateczne słowo kluczowe w java? który obejmuje zmienne końcowe, metody końcowe, klasy końcowe wraz ze składnią. Możesz także przejrzeć następujące artykuły, aby dowiedzieć się więcej -

  1. Typy i modyfikatory używane dla JComponent w Javie
  2. Nowe funkcje Java 8
  3. Jak stworzyć obiekt w JavaScript?
  4. Co to jest instrukcja Case w JavaScript?
  5. Rzut vs Rzuty | 5 najważniejszych różnic, które powinieneś znać
  6. Deklarowanie klasy abstrakcyjnej w C # z przykładem
  7. Zastosowania i przykłady tego słowa kluczowego