Menggunakan Final Inheritance Java dan Fungsinya
Penggunaan final dengan Inheritance
Selama proses inheritance pada Java, dapat dideklarasikan method dengan keyword yang mengharuskan implementasi yang sama pada seluruh subclass inheritance.// 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());}
}
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
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.");} }
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.
- 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.
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.");}
}
Kesimpulan
- Object Serialisasi Java Terhadap Inheritance
- Object Subclass dan Subclass Java Dan Referensi Superclass
- Overloading dan Inheritance Java dan Fungsinya
- Tipe Operator Java dan Fungsinya
- Operator Aritmatika Java Beserta Penjelasannya
- Operator Unary Java dan Penjelasannya
- Operator Penugasan Java Beserta Contohnya
6 komentar untuk "Menggunakan Final Inheritance Java dan Fungsinya"
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 -
Apa yang dimaksud dengan final inheritance pada Java?
BalasHapusfinal 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.
HapusApakah final adalah modifier pada Java?
BalasHapus1. final adalah modifier pada Java yang dapat diterapkan ke variabel, method, ataupun class.
Hapus2. 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.
Apakah constructor dapat dinyatakan dalam final pada Java?
BalasHapusTidak, 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