Inheritance pada Bahasa Pemograman Java

Herley Shaori
4 min readAug 27, 2020

Java adalah bahasa pemograman berorientasi objek. Salah satu fitur pemograman berorientasi objek adalah mekanisme pewarisan sifat. Pewarisan sifat pada bahasa pemograman Java, dapat dicapai melalui tiga mekanisme yaitu: inheritance, interface, dan polymorphism. Artikel ini membahas mekanisme inheritance.

Mekanisme inheritance menggunakan kata kunci extends. Kata kunci tersebut mengakibatkan penyalinan kode dari kelas induk ke kelas anak. Mekanisme ini mengizinkan pemogram untuk menggunakan kembali kode kelas induk ke kelas anak tanpa menulis ulang kode program (reusability). Pemogram juga diizinkan untuk melakukan override metode dari kelas induk, namun tentunya dengan access modifier (hanya public dan protected saja) yang sesuai. Berdasarkan penyalinan kode tersebut, maka kelas anak disebut memiliki perilaku yang sama dengan kelas induknya. Pemogram hanya diminta menyediakan nilai argumen yang sesuai bagi parameter kelas induk. Tentu tidak salah jika pemogram memutuskan untuk melakukan override pada sebagian besar metode dari kelas induk, namun jika sebagian besar metode harus ditulis ulang (diimplementasikan ulang ) oleh pemogram, sifat penyalinan baris kode tadi menjadi tidak terasa dan seolah tidak berguna. Saya sarankan menggunakan mekanisme interface untuk melakukan pewarisan sifat pada metode yang selalu memiliki tujuan yang unik namun dengan perilaku yang sama.

Misalkan diberikan sebuah skenario:

Sebuah koleksi buku terdiri atas koleksi buku fiksi dan buku ilmiah. Buatlah simulasi penyimpanan buku fiksi dan buku ilmiah yang hanya menerima argumen masukan berupa nama buku dan jenis buku.

Pada skenario diatas, jenis buku sudah ditentukan yaitu buku fiksi dan buku ilmiah. Berdasarkan skenario tersebut, salah satu rancangan kelas yang dapat digunakan diberikan pada Gambar 1.

Gambar 1: Struktur Kelas Skenario

Berdasarkan Gambar 1, Buku, Fiksi, dan Ilmiah adalah nama kelas. Kelas Fiksi dan Kelas Ilmiah adalah turunan dari kelas Buku atau kelas Buku adalah super class bagi kelas fiksi dan kelas ilmiah. Kelas Buku memiliki dua variabel yaitu namaBuku yang berfungsi untuk menyimpan nama buku dan tipeBuku yang berfungsi sebagai untuk menyimpan tipe buku. Kelas Buku juga memiliki metode yaitu getNamaBuku() dan getTipeBuku() yang masing-masing berfungsi untuk mengembalikan nama buku dan tipe buku. Catat bahwa nama buku dan tipe buku memiliki tipe data String. Perhatikan bahwa pada kelas Fiksi dan kelas Ilmiah, tidak terdapat variabel dan metode yang ada pada kelas Buku (getNamaBuku() dan getTipeBuku()).

Konstruktor pada bahasa pemograman Java selalu dijalankan saat pertama kali kelas diinisialisasi. Kelas Buku memiliki sebuah konstruktor dengan parameter berupa namaBuku dan tipeBuku. Argumen parameter tersebut akan disimpan pada variabel namaBuku dan tipeBuku sehingga metode getNamaBuku() dan getTipeBuku() dapat melakukan pengembalian nilai. Kelas Fiksi dan kelas Ilmiah juga memiliki konstruktor dengan parameter yang sama. Sekarang mari kita tinjau kode program.

public class Buku {
private final String namaBuku, tipeBuku;
public Buku(String namaBuku, String tipeBuku){
this.namaBuku = namaBuku;
this.tipeBuku = tipeBuku;
}
/**
* @return the namaBuku
*/
public String getNamaBuku() {
return namaBuku;
}
/**
* @return the tipeBuku
*/
public String getTipeBuku() {
return tipeBuku;
}
}

Kode program diatas adalah kelas Buku. Private dan final adalah access modifier yang disematkan pada variabel namaBuku dan tipeBuku. Kata kunci private digunakan supaya kelas anak tidak memiliki akses untuk mengubah nilai variabel ini secara langsung. Kata kunci final berarti setelah variabel tersebut diinisialisasi dengan sebuah nilai, maka tidak diperbolehkan memberikan nilai yang lain kepada variabel tersebut.

public class Fiksi extends Buku{
public Fiksi(String namaBuku, String tipeBuku) {
super(namaBuku, tipeBuku);
}
}

Kode program diatas adalah kode program kelas Fiksi.

public class Ilmiah extends Buku{
public Ilmiah(String namaBuku, String tipeBuku) {
super(namaBuku, tipeBuku);
}
}

Kode program diatas adalah kode program kelas Ilmiah.

Pada kelas Fiksi dan kelas Ilmiah, inheritance dilakukan dengan kata kunci extends. Maka seluruh implementasi kode program kelas Buku, diwarisi oleh kelas Fiksi dan kelas Ilmiah. Kata kunci super pada kedua kelas tersebut mengizinkan nama buku dan tipe buku untuk diproses pada kelas induk, bukan kelas anak. Pada tahap ini, baris kode kelas Fiksi dan kelas Ilmiah lebih sedikit daripada baris kode kelas Buku. Untuk kemudahan, pastikan ketiga kelas diatas berada dalam satu package.

public class Main {
public static void main(String[] args) {
Fiksi bukuFiksi = new Fiksi("Buku Fiksi Satu", "fiksi");
Ilmiah bukuIlmiah = new Ilmiah("Buku Ilmiah Satu", "ilmiah");

// Mendapatkan nama buku.
System.out.println("Judul: "+bukuFiksi.getNamaBuku());

// Akses kelas induk.
Buku buku = bukuIlmiah;
System.out.println("Judul: "+buku.getNamaBuku());
}
}
Gambar 2: Luaran dari Kode Program pada Kelas Main

Kode diatas adalah simulasi penyimpanan buku. Objek bukuFiksi dan bukuIlmiah merupakan instan dari kelas Fiksi dan Ilmiah. Pada kode program diatas, objek bukuFiksi dapat mengakses metode getNamaBuku() dari kelas Buku. Catat bahwa metode getNameBuku() tidak ditulis secara eksplisit pada kelas Fiksi. Kelas Buku sebagai induk, dapat diinisialisasi dengan instan dari kelas Ilmiah atau Fiksi karena pada dasarnya, inheritance merupakan ikatan IS-A (adalah) dari kelas. Jadi boleh kita sebut bahwa objek bukuFiksi dan bukuIlmiah merupakan instan dari kelas Buku. Gambar 2, memberikan luaran dari kode program kelas Main sebagai kelas utama yang mengindikasikan bahwa program dapat dijalankan dengan baik.

Muncul sebuah pertanyaan, “Mengapa kita menginisialisasi kelas Buku dengan objek Fiksi atau Ilmiah?”

Skenario yang pernah saya alami adalah saat kita bekerja dalam satu tim. Orang dalam tim tersebut berkomunikasi dan fokus kepada bagian masing-masing. Hal ingin dicapai adalah satu orang dalam satu tim tidak perlu tahu implementasi kode program orang lain. Cukup misalkan disediakan antar muka yang menerima masukan berupa misalnya nama buku dan jenis buku, maka bagaimana hal tersebut diolah oleh orang tersebut, bukan merupakan fokus anggota tim yang lain. Anggota tim yang lain hanya perlu tahu masukan apa yang diberikan pada sebuah metode, kemudian luaran apa nanti yang diberikan dari metode tersebut. Terlepas dari sebenarnya bagian kode tersebut dikerjakan oleh orang lain.

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

Herley Shaori
Herley Shaori

Written by Herley Shaori

I love to write about AWS and other related computer science topics.

Responses (1)

Write a response