Minggu, Mei 16, 2021

Penggunaan final dengan Inheritance pada Java

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

prasyarat pengetahuan - Overriding pada JavaInheritance pada Java

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

}

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

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:
  • satu, Pendeklarasian sebuah class sebagai final secara implisit mendeklarasikan semua method sebagai final juga.
  • dua, 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.

6 komentar:

  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

Respon komentar 7 x 24 jam, so please be patient :D