Lompat ke konten Lompat ke sidebar Lompat ke footer

Menggunakan Final Inheritance Java dan Fungsinya

final adalah Keyword pada Java yang digunakan untuk membatasi beberapa fungsi, dapat dideklarasikan dengan variabel, method, dan class pada bahasa pemrograman Java.

Sebelum lebih lanjut mempelajari materi tentang cara Menggunakan Final Inheritance Java dan Fungsinya, terlebih dahulu pelajari materi tentang: Membuat Object Java dari Class Turunan dan Fungsinya, Inheritance dan Constructor Java dan Fungsinya, dan Interface dan Inheritance Java dan Fungsinya.

Pewarisan final adalah fitur dalam pemrograman Java yang memungkinkan pengguna untuk membatasi pewarisan kelas turunan dari kelas tertentu. Dengan menggunakan kata kunci final, pengembang dapat memastikan bahwa kelas tertentu tidak dapat diwariskan oleh kelas lain. Artikel ini akan menjelaskan cara menggunakan pewarisan final dalam Java, serta fungsinya dalam meningkatkan keamanan dan keandalan dalam pengembangan perangkat lunak.

Dalam Java, kata kunci final dapat digunakan pada tiga level yang berbeda: kelas, metode, dan variabel. Ketika digunakan pada kelas, final mengindikasikan bahwa kelas tersebut tidak dapat diwariskan oleh kelas lain. Berikut adalah contoh penggunaan final pada kelas dalam Java: final class Parent { /* Konten kelas */ }

Penggunaan final dengan Inheritance

Selama proses inheritance pada Java, dapat dideklarasikan method dengan keyword yang mengharuskan implementasi yang sama pada seluruh subclass inheritance.

Contoh:

// Program Java

// mengilustrasikan penggunaan

// dari final dengan

// inheritance.

 

/* base class */

abstract class Shape 

private double width;  

private double height; 

 

// Shape class parameterisasi

// constructor.

public Shape(double width, double height

{this.width = width; 

this.height = height;} 

 

// method getWidth

// dideklarasikan sebagai

// final sehingga class apapun

// yang extend terhadap Shape

// tidak dapat override.

public final double getWidth() 

{return width;} 

 

// method getHeight

// dideklarasikan sebagai

// final sehinggal class

// apapun yang extend terhadap

// Shape tidak dapat override.

public final double getHeight() 

{return height;} 

 

// method getArea()

// dideklarasikan sebagai

// abstract karena pada

// subclass-nya memberikan

// implementasi yang lengkap.

abstract double getArea(); 

 

/* derived class one */

class Rectangle extends Shape 

// Rectangle class

// parameterisasi constructor.

public Rectangle(double width, double height

{// memanggil constructor

// Shape class.

super(width, height);} 

 

// method getArea overriding

// dan dideklarasikan sebagai

// final sehingga class apapun

// yang extend terhadap

// Rectangle tidak dapat

// overriding terhadap class

// tersebut.

@Override

final double getArea() 

{return this.getHeight() * this.getWidth();} 

 

/* derived class two */

class Square extends Shape 

// Rectangle class

// parameterisasi constructor.

public Square(double side

{// memanggil constructor

// Shape class.

super(side, side);} 

 

// method getArea overriding

// dan dideklarasikan sebagai

// final sehingga class apapun

// yang extend Square tidak

// dapat overriding.

@Override

final double getArea() 

{return this.getHeight() * this.getWidth();} 

 

/* Driver class */

public class Test 

public static void main(String[] args

{// ciptakan object Rectangle.

Shape s1 = new Rectangle(10, 20); 

  

/* ciptakan object Square */ 

Shape s2 = new Square(10); 

  

// mendapatkan nilai width dan

// height dari s1.

System.out.println("lebar "

+"dari s1 : "

+s1.getWidth()); 

 

System.out.println("panjang"

+dari s1 : "

+s1.getHeight()); 

  

// mendapatkan nilai witdh dan

// height dari s2.

System.out.println("lebar "

+dari s2 : "

+s2.getWidth()); 

 

System.out.println("panjang"

+dari s2 : "

+s2.getHeight()); 

  

/* mendapatkan area dari s1 */ 

System.out.println("luas "

+dari s1 : "

+s1.getArea()); 

  

/* mendapatkan area dari s2 */ 

System.out.println("luas "

+dari s2 : "

+s2.getArea());} 

}

Output:
lebar dari s1 : 10.0
panjang dari s1 : 20.0
lebar dari s2 : 10.0
panjang dari s2 : 10.0
luas dari s1 : 200.0
luas dari s2 : 100.0

Baca Juga:

Penggunaan final untuk Mencegah Inheritance

Ketika sebuah class dideklarasikan sebagai final, maka class tersebut tidak bisa dijadikan subclass, karena tidak ada class lain yang bisa extend terhadap class tersebut. Contohnya, ketika diciptakan immutable class seperti predefinisi class String. Fragmen berikut menggambarkan keyword final dengan class:

final class A
{/* methods dan fields */}
/* class berikut ini bersifat ilegal */
class B extends A 
/* ERROR! tidak dapat menjadi sub class A */}

Catatan:
  • Pendeklarasian sebuah class sebagai final secara implisit mendeklarasikan semua method sebagai final juga.
  • Adalah ilegal jika mendeklarasikan sebuah class sebagai abstract dan final ketika class abstract tidak dilengkapi oleh class itu sendiri, dan bergantung pada subclass-nya sendiri untuk menyediakan implementasi lengkap.

Penggunaan final untuk Mencegah Overriding

Ketika sebuah method dideklarasikan sebagai final, maka method tersebut tidak dapat overriding oleh subclass-nya. Fragmen berikut mengilustrasikan keyword final dengan sebuah method:

class A final void m1(){System.out.println("This is a final method.");}
class B extends A void m1() {/* ERROR! tidak dapat melakukan overriding */
System.out.println("Illegal!");}

Secara normal, Java memanggil method secara dinamis pada saat runningtime. Hal ini dikenal dengan istilah late atau dynamic binding. Namun, semenjak method final tidak bisa melakukan overriding, maka pemanggilan dilakukan pada saat waktu kompilasi. Hal ini disebut dengan istilah early atau static binding pada bahasa pemrograman Java.

Fungsi pewarisan final dalam Java:
  • Keamanan Struktur Kode: Dengan membuat kelas final, pengembang dapat mengunci struktur kode yang sudah ada dan mencegah kelas tersebut diubah atau diperluas oleh kelas lain. Ini membantu menjaga keamanan dan keandalan kode, terutama dalam lingkungan pengembangan tim yang besar.
  • Pemeliharaan Konsistensi: Pewarisan final memastikan bahwa desain kelas tertentu tidak akan berubah dari waktu ke waktu, yang membantu menjaga konsistensi dan stabilitas dalam kode. Hal ini memungkinkan pengembang untuk mempercayakan perilaku dan fungsionalitas kelas yang sudah ditentukan tanpa khawatir tentang perubahan yang tidak diinginkan.
  • Meningkatkan Kinerja: Dengan membuat kelas final, Java dapat melakukan beberapa optimisasi dalam pelaksanaan kode, karena tidak perlu mempertimbangkan kemungkinan adanya kelas turunan. Hal ini dapat menghasilkan peningkatan kinerja dalam beberapa kasus.
  • Mencegah Kesalahan yang Tak Terduga: Dengan membatasi pewarisan kelas tertentu, pengembang dapat menghindari masalah yang disebabkan oleh perubahan tak terduga dalam perilaku kelas atau penambahan fungsionalitas yang tidak diinginkan oleh kelas turunan.

Contoh:

final class Shape {

void draw() {

System.out.println(

"Drawing a shape.");}

}


// Kelas Circle tidak dapat

// mewarisi kelas Shape karena

// Shape dinyatakan sebagai

// final

class Circle extends Shape {

void draw() {        System.out.println(

"Drawing a circle.");}

}

Berdasarkan contoh yang diperlihatkan sebelumnya, kelas Shape dinyatakan sebagai final, sehingga kelas Circle tidak dapat mewarisinya. Jika pengembang mencoba untuk melakukan pewarisan seperti yang ditunjukkan dalam komentar, Java akan menghasilkan kesalahan kompilasi.

Kesimpulan

Pewarisan final adalah fitur yang berguna dalam pengembangan perangkat lunak Java yang memungkinkan pengembang untuk membatasi pewarisan kelas tertentu. Dengan menggunakan kata kunci final, pengembang dapat meningkatkan keamanan, keandalan, dan kinerja kode program, sambil menjaga konsistensi dan stabilitas dalam struktur kelas. Dengan memahami cara menggunakan dan manfaat dari pewarisan final, pengembang dapat merancang dan mengimplementasikan aplikasi Java yang lebih aman, andal, dan efisien.

Referensi Tambahan:

Artikel ini didedikasikan kepada: Azzam Fattahulhaq Santoso, Cicik Munfarida, Deviana Puput Saputri, Elian Anindia Permatasari, dan Farisa Nur Rizkika.

6 komentar untuk "Menggunakan Final Inheritance Java dan Fungsinya"

  1. Apa yang dimaksud dengan final inheritance pada Java?

    BalasHapus
    Balasan
    1. final merupakan keyword dalam Java yang digunakan untuk membatasi beberapa fungsi. User dapat mendeklarasikan variabel, method, dan class dengan menggunakan keyword final. Selama dilakukan pewarisan atau inheritance, user harus mendeklarasikan method dengan menggunakan keyword final yang diperlukan untuk mengikuti implementasi yang sama pada semua class turunan.

      Hapus
  2. Apakah final adalah modifier pada Java?

    BalasHapus
    Balasan
    1. 1. final adalah modifier pada Java yang dapat diterapkan ke variabel, method, ataupun class.

      2. Ketika final modifier digunakan dengan class, maka class tersebut tidak dapat di extend penggunaannya. Hal ini adalah salah satu cara untuk melindungi class dari sub class dan class lain yang sifatnya sensitif jika terjadi kesalahan, sehingg adibuat final untuk alasan keamanan.

      Hapus
  3. Apakah constructor dapat dinyatakan dalam final pada Java?

    BalasHapus
    Balasan
    1. Tidak, constructor tidak dapat dibuat dalam bentuk final. Method final tidak dapat diganti oleh subclass manapun, melainkan, dalam instance sub class yang inheritance super class, kecuali constructor. Dengan kata lain, constructor tidak dapat diturunkan pada Java. Oleh karena itu, tidak perlu menulis final sebelum deklarasi constructor Java.

      Hapus

Hubungi admin melalui Wa : +62-896-2414-6106

Respon komentar 7 x 24 jam, mohon bersabar jika komentar tidak langsung dipublikasi atau mendapatkan balasan secara langsung.

Bantu admin meningkatkan kualitas blog dengan melaporkan berbagai permasalahan seperti typo, link bermasalah, dan lain sebagainya melalui kolom komentar.

- Ikatlah Ilmu dengan Memostingkannya -
- Big things start from small things -