Вступ до кінцевого ключового слова на Java

У цьому дописі ми розглянемо різні кінцеві ключові слова java. Це ключове слово, яке використовується мовою java для застосування обмежень щодо його використання чи модифікації іншими класами чи змінними. Використовуючи це ключове слово, можна сказати інтерпретатору не допускати будь-яких майбутніх змін цієї змінної чи методу і трактувати її як постійну. Він може бути використаний для нижчих трьох сценаріїв: -

  1. Змінна: оголошення змінної як остаточної обмежує її зміну для посилання на будь-яке інше значення або посилання.
  2. Методи: оголошення методу остаточним обмежує переосмислення методу цього методу в дочірніх класах.
  3. Класи: Оголошення класу остаточним перешкоджає успадкуванню цього класу.

Ці ключові слова завжди рекомендується оголошувати великими літерами відповідно до належної практики кодування.

Синтаксис підсумкового ключового слова на Java

Це ключове слово можна використовувати нижче трьох способів: -

1. Змінна

Змінні в java можуть бути оголошені змінними, щоб обмежити будь-які зміни його значень. Це можна оголосити будь-яким із трьох нижче способів-

Синтаксис:

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

Примітка. Змінні посилання також можуть бути оголошені статичними, так що вони не можуть містити посилання на інший об'єкт. Але через внутрішню природу об'єкта посилання може бути змінено.

final String builder sb = new StringBuilder ("LetsLearn");

2. Методи

Метод, оголошений з кінцевим ключовим словом, вважається кінцевим методом. Остаточний метод не може бути замінений його дочірнім класом, а це означає, що метод дочірнього класу не може змінити визначення кінцевого методу, присутнього в батьківському класі. Коли ми хочемо, щоб реалізація методу, визначеного у батьківському класі, повинна дотримуватися у всіх його дочірніх класах, тоді ми повинні оголосити цей метод остаточним.

Синтаксис:

final int my1()(
//method defination
)

3. Заняття

Кінцеві ключові слова також можна використовувати з класами, щоб зробити його остаточним класом, що означає, що певний клас не може бути розширений або успадкований жодними іншими класами.

Синтаксис:

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

Як працює заключне ключове слово на Java?

Заключне ключове слово допомагає обмежити переопределення класів, членів або змінних під час успадкування.

1. Кінцеві змінні

Оголошення змінної як кінцевої означає обмеження будь-якої зміни значення змінної у спадкових класах. Кінцева змінна може бути ініціалізована лише один раз і повинна бути використана такою, якою вона є, тому треба ініціалізувати остаточну змінну. Він використовується в основному зі статичним для створення постійної змінної класу.

Наприклад:

final int a =0;

Ми також можемо оголосити опорні змінні остаточними. У цьому випадку одна контрольна змінна не може посилатися на різні об'єкти. Але у java внутрішній стан об'єкта може бути змінений, що передається остаточною контрольною змінною. Таким чином, ми можемо внести зміни до значення опорної змінної. Це те саме, що використовувати кінцеві масиви, як показано нижче: -

Код:

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));
)
)
)

Вихід:

Пояснення

Тут масив a1 посилається на один і той же об'єкт, змінюється лише значення цього об'єкта, оскільки всі ми знаємо, що змінна масиву містить лише початкову адресу місця пам'яті, де зберігаються ці елементи масиву.

І в тому ж випадку, якщо ми спробуємо віднести різні масиви, використовуючи одну і ту ж змінну масиву a1, компілятор видасть помилку. Таким чином, використовуючи тут кінцевий слово масив означає, що будь-яка зміна може бути внесена до складу масиву, але змінна не може посилатися на будь-який інший об'єкт.

Що потрібно пам’ятати

Ініціалізація остаточної змінної необхідна для запобігання помилки часу компіляції. Існує різниця між C ++ змінними const і цими кінцевими змінними, які не потребують ініціалізації змінних const. Існує три способи ініціалізації остаточної змінної-

  • Ініціалізувати під час декларування : Ми можемо легко оголосити остаточну змінну на момент її декларування. Якщо вона не ініціалізована, то ця змінна вважається порожньою кінцевою змінною, і будь-який з наступних 2 способів може допомогти нам ініціалізувати порожню остаточну змінну.
  • Використання блоку ініціалізатора екземпляра : Всередині цього блоку або конструктора пуста остаточна змінна може бути легко ініціалізована. При використанні конструктора для ініціалізації завжди пам’ятайте про ініціалізацію певної змінної у всіх доступних конструкторах.
  • Статичний блок: Можна також використовувати статичний блок для ініціалізації порожньої кінцевої змінної. Статичний блок завжди спрацьовує один раз для кожного класу, тому значення змінної, значення якої не передбачається змінювати, може бути легко ініціалізовано за допомогою цього блоку.

Таким чином, остаточне ключове слово використовується лише для тієї змінної, якій не потрібно змінювати своє значення під час виконання програми. Усі кінцеві змінні, створені всередині методу чи блоку, повинні бути ініціалізовані саме там. Такі змінні типу відомі як локальні кінцеві змінні.

Пояснення

У наведеному нижче прикладі змінна i була оголошена в межах основної функції і ініціалізована також, таким чином, розглядається як кінцева локальна змінна.

Код:

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

Вихід:

2. Заключні методи

Метод, оголошений як остаточний, не може бути замінений у жодному з підкласів, тому його називають остаточним методом. Метод потрібно визнати остаточним, якщо ми вимагаємо, щоб до того ж виконання класу дотримувалися дочірні класи.

Примітка. Не обов’язково, щоб остаточні методи оголошувались на початковій стадії успадкування (базовий клас). Метод може бути оголошений остаточним у будь-якому підкласі, який ми хочемо, щоб наступні підкласи виконували те саме визначення.

Код:

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. Підсумкові класи

Класи, оголошені як остаточні, не можуть бути успадковані жодними іншими класами. Згадування остаточного ключового слова перед назвою класу повідомляє компілятору, що визначення цього класу можна використовувати лише таким, яким вони є. Жоден інший клас не може додавати свої характеристики до цього визначення або повторно використовувати його код. У разі, якщо намагається розширити остаточний клас, компілятор видає помилку, що вказує на те, що цей клас не призначений для продовження. Кінцеві ключові слова в java можна використовувати для будь-яких цілей нижче 2:

  1. Перший полягає у запобіганні успадкування цього класу. Наприклад, всі наявні пакети Wrapper java.lang - це заключні класи, тому ми не можемо розширити їх у наших класах, але можемо використовувати його, оголошуючи їх об'єкти. Будь-яка спроба зробити доступ до цих класів призведе до помилки компілятора.

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

  1. Друге використання фіналу з класами - це коли потрібно створити незмінний клас, тобто коли об’єкт класу створений, ми не можемо змінити його вміст, як попередньо визначений клас String. Клас повинен бути оголошений остаточним, щоб зробити його непорушним.

Примітка :

  • Якщо клас оголошений як остаточний, то його змінні елементи та функції члена також компілятором вважаються остаточними.
  • Клас не може бути оголошений абстрактним, якщо він залежить від дочірніх класів для завершення його визначення, а також остаточного, що перешкоджає самому успадкуванню.

Приклади кінцевого ключового слова на Java

Нижче наведено різні приклади підсумкового ключового слова на Java:

1. Використання остаточної змінної

У наведеному нижче прикладі різні змінні ініціалізуються за допомогою різних методів. Наприклад - змінна SECOND ініціалізується за допомогою конструктора, тоді як THIRD ініціалізується за допомогою ініціалізатора.

Код:

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
)
)

Вихід:

2. Використання заключних методів

У наведеному нижче прикладі абстрактний клас myShape оголошує остаточні методи getWidth та отримує вісім тих, хто не повинен перекривати успадковані класи. Він також оголошує одну абстрактну функцію, реалізація якої є обов'язковою у наступних класах. Таким чином, єдине визначення абстрактної функції реалізується як у першому дочірньому класі, так і у другому дочірньому класі.

Код:

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());
)
)

Вихід:

3. Використання підсумкових класів

У нижченаведеній програмі ми використовуємо остаточний клас Solid, який визначає метод обчислення обсягу фігури з використанням її розмірів, але відображення об'єму поля робиться за допомогою функції printVol у спадковому класі. Shape As Solid є остаточним класом, тому клас Shape забороняється розширювати (або успадковувати) його. Таким чином, він використовує об'єкт Shape для обчислення обсягу будь-якої форми, просто передаючи аргументи функціям.

Код:

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);
)
)

Вихід:

Висновок

Заключне ключове слово використовується для запобігання перекриття класів, змінних та методів його дочірніми класами. Він також може бути використаний для того, щоб зробити класи незмінними, що обмежує зміну значення його об'єктів. Остаточна перевірка ключових слів завжди перевіряється лише в час компіляції. Це велика утиліта для запобігання повторного використання визначених змінних, логіки та класів.

Рекомендовані статті

Це посібник із прикладу заключного ключового слова на Java. Тут ми обговорюємо, як працює фінальне ключове слово в java? який включає кінцеві змінні, заключні методи, підсумкові класи разом із синтаксисом. Ви також можете переглянути наступні статті, щоб дізнатися більше -

  1. Типи та модифікатори, які використовуються для JComponent на Java
  2. Нові можливості Java 8
  3. Як створити об’єкт у JavaScript?
  4. Що таке випадок справи у JavaScript?
  5. Киньте проти кидок | Топ 5 відмінностей, які ви повинні знати
  6. Оголошення абстрактного класу в C # з прикладом
  7. Використання та приклади цього ключового слова