1. Modul PBO – Teknokrat
39
PEWARISAN (INHERITANCE)
Tujuan
Praktikan dapat memahami dan menjelaskan tentang pewarisan kelas, kelas abstrak,
dan juga interface, serta dapat mengimplementasikan ke dalam pemrograman Java.
PEWARISAN
Pewarisan merupakan kemampuan suatu kelas untuk mewariskan seluruh atau sebagian atribut dan
methodnya ke kelas lain, sehingga atribut dan method tersebut dapat dikenali oleh kelas yang
menerima pewarisan tanpa harus menuliskannya. Pewarisan merupakan implementasi dari
hubungan antar kelas generalisasi dan spesialisasi.
Kelas yang mewariskan disebut dengan kelas induk, super class, atau base class. Kelas yang
menerima pewarisan disebut kelas anak, kelas turunan, atau subclass. Konsep pewarisan dapat
dilakukan jika:
· Ada beberapa atribut dan method yang sama yang digunakan oleh beberapa kelas berbeda
(reduksi penulisan kode)
· Ada satu atau beberapa kelas yang sudah pernah dibuat yang dibutuhkan oleh aplikasi
(reusability)
· Ada perubahan kebutuhan fungsional atau feature aplikasi dimana sebagian atau seluruh
perubahan tersebut tercakup di satu atau beberapa kelas yang sudah ada (extend)
Berikut adalah beberapa contoh pewarisan:
Tabel 5. 1 Contoh Bentuk Pewarisan
Superclass Subclasses
Student GraduateStudent, UndergraduateStudent
Shape Circle, Triangle, Rectangle
Loan CarLoan, HomeImprovementLoan, MortgageLoan
Employee Faculty, Staff
BankAccount CheckingAccount, SavingAccount
PEWARISAN DI JAVA
Pada pemrograman Java hanya mengenal pewarisan tunggal, sebuah kelas hanya dapat mewarisi
atribut dan method dari satu kelas induk. Untuk menggunakan pewarisan di Java digunakan keyword
extends. Gambar 5.1 adalah contoh bentuk pewarisan.
5
BAB
2. Modul PBO – Teknokrat
40
Berdasarkan Gambat 5.1, kelas induk (kelas dosen) memiliki atribut nik dan nama. Method yang
dimiliki kelas dosen antara lain Konsturktor Dosen, getNik, getNama, dan view. Untuk kelas turunan
dari kelas dosen yaitu kelas Dekan dan Rektor. Pada kelas Dekan terdapat tambahan atribut yaitu
fakultas, serta method Konstruktor Dekan, getFakultas, dan viewDekan. Pada kelas Rektor terdapat
tambahan atribut tahunMasuk, serta method konstruktor Rektor, getTahunMasuk, dan viewRektor.
Gambar 5. 1 Contoh kelas diagram pewarisan Dosen, Dekan, dan Rektor
Berikut adalah pendefinisian dari masing-masing kelas:
3. Modul PBO – Teknokrat
41
Program 5-
1
// Dosen.java
public class Dosen {
private String nik;
private String nama;
public Dosen(String nik, String nama) {
this.nik = nik;
this.nama = nama;
}
public String getNik() { return nik; }
public String getNama() { return nama; }
public void view() {
System.out.println("Dosen: " + nik + " - " + nama);
}
}
// Dekan.java
public class Dekan extends Dosen {
private String fakultas;
public Dekan(String nik, String nama, String fakultas) {
super(nik, nama);
this.fakultas = fakultas;
}
public String getFakultas() { return fakultas; }
public void viewDekan() {
System.out.print("Dekan Fakultas " + fakultas);
System.out.print(": " + super.getNik());
System.out.println(" = " + super.getNama());
}
}
// Rektor.java
public class Rektor extends Dosen {
private int tahunMasuk;
public Rektor(String nik, String nama, int tahunMasuk) {
super(nik, nama);
this.tahunMasuk = tahunMasuk;
}
public int getTahunMausk() { return tahunMasuk; }
public void viewRektor() {
System.out.print("Rektor: " + super.getNik());
System.out.print(" - " + super.getNama() + "n");
System.out.println("Tahun Diangkat: " + tahunMasuk);
}
}
4. Modul PBO – Teknokrat
42
// MainInheritance1.java
public class MainInheritance1 {
public static void main(String [] args) {
Dosen Do = new Dosen("1234567", "Budiono");
Do.view();
Dekan De = new Dekan("1234577", "Warsito", "FMIPA");
De.view();
De.viewDekan();
Rektor Re = new Rektor("1234588", "Dewanto", 2015);
Re.view();
Re.viewRektor();
}
}
Hasil Output
Kode: PC-01
Processor: Pentium IV, 500
Monitor: Sony Multiscan 15sf
Printer: Canon BJC-210sp, Color
Harga: Rp. 850000
Berdasarkan implementasi terlihat bahwa method getNik, getNama, dan view diturunkan ke kelas
Rektor dan Dekan sehingga kelas-kelas tersebut dapat menggunakan method tersebut. Konstruktor
dari kelas induk tidak dapat diturunkan kepada kelas turunannya. Untuk menggunakan method dan
konstruktor dari kelas induk pada kelas anak dapat menggunakan keyword super.
Berikut adalah contoh lain bentuk pewarisan:
Gambar 5. 2 Contoh kelas diagram pewarisan Rectangle dan Box
Implementasi kelas diagram di atas dalam Java adalah sebagai berikut:
5. Modul PBO – Teknokrat
43
Program 5-2
// Rectangle.java
public class Rectangle {
private double panjang;
private double lebar;
public Rectangle (double p, double l) {
panjang = p;
lebar = l;
}
public double getPanjang() { return panjang; }
public double getLebar() { return lebar; }
public double luas() {
return panjang * lebar;
}
public double keliling() {
return 2 * (panjang + lebar);
}
}
// Box.java
public class Box extends Rectangle {
private double tinggi;
public Box(double p, double l, double t) {
super(p, l);
tinggi = t;
}
public double getTinggi() { return tinggi; }
public double luasPermukaan() {
return 2 * (getPanjang() * getLebar() +
getPanjang() * getTinggi() +
getLebar() * getTinggi());
}
public double volume() {
return luas() * tinggi;
}
}
6. Modul PBO – Teknokrat
44
// MainInheritance2.java
public class MainInheritance2 {
public static void main(String [] args) {
Rectangle R = new Rectangle(10, 5);
Box B = new Box(3, 4, 5);
System.out.println("Rectangle");
System.out.println("Panjang: " + R.getPanjang());
System.out.println("Lebar: " + R.getLebar());
System.out.println("Keliling: " + R.keliling());
System.out.println("Luas: " + R.luas());
System.out.println();
System.out.println("Box");
System.out.println("Panjang: " + B.getPanjang());
System.out.println("Lebar: " + B.getLebar());
System.out.println("Tinggi: " + B.getTinggi());
System.out.println("Luas Permukaan: " + B.luasPermukaan());
System.out.println("Volume: " + B.volume());
}
}
Hasil Output
Rectangle
Panjang: 10.0
Lebar: 5.0
Keliling: 30.0
Luas: 50.0
Box
Panjang: 3.0
Lebar: 4.0
Tinggi: 5.0
Luas Permukaan: 94.0
Volume: 60.0
PEWARISAN BERTINGKAT (MULTILEVEL INHERITANCE)
Konsep inheritance yang ada di Java memperkenankan adanya multilevel inheritance. Konsep
multilevel inheritance memperbolehkan suatu subclass mempunyai subclass lagi. Berikut adalah
contoh class diagram penerepan pewarisan bertingkat pada Java.
7. Modul PBO – Teknokrat
45
Gambar 5. 3 Contoh kelas diagram multiple inheritance
KELAS ABSTRAK
Kelas abstrak merupakan bentuk khusus dari kelas. Kelas abstrak ini tidak dapat diinstansiasi dan
digunakan hanya untuk diturunkan ke dalam bentuk kelas konkret atau kelas abstrak berikutnya.
Untuk mendeklarasikan kelas abstrak dengan menggunakan keyword abstract.
Kelas abstrak memiliki atribut dan method sama seperti kelas konkret, namun dalam kelas abstrak
harus terdapat minimal satu method abstrak. Method abstrak adalah method yang tidak mempunyai
implementasi hanya deklarasinya (prototipe) saja. Berikut ini adalah contoh kelas abstrak:
Gambar 5. 4 Kelas diagram untuk kelas abstrak Person
Implementasi dari kelas abstrak diagram di atas pada Java adalah sebagai berikut:
Program 5-3
8. Modul PBO – Teknokrat
46
// Person.java
public abstract class Person {
private String name;
public Person(String name) {
this.name = name;
}
public abstract String getDescription();
public String getName() { return name; }
}
Berdasarkan kode di atas, dapat dilihat method getDescription merupaka method abstrak karena
tidak memiliki implementasi. Ketika suatu kelas mewarisi kelas abstrak, kelas tersebut harus
mendefinisikan implementasi dari method abstrak yang ada dalam kelas induknya. Jika tidak
didefinisikan implementasinya, maka kelas tersebut akan menjadi kelas abstrak juga. Berikut adalah
contoh pewarisan teradap kelas abstrak:
Gambar 5. 5 Kelas diagram kelas abstrak dan kelas turunannya
Implementasi dari kelas diagram di atas pada Java adalah sebagai berikut:
Program 5-4
// Student.java
public class Student extends Person {
private String major;
public Student(String name, String major) {
super(name);
this.major = major;
}
public String getDescription() {
return ("a student name " + getName() +
" majoring in " + major);
}
}
// Employee.java
public class Employee extends Person {
private double salary;
public Employee(String name, double salary) {
super(name);
this.salary = salary;
}
9. Modul PBO – Teknokrat
47
public String getDescription() {
return ("an employee name " + getName() +
" with a salary of " + salary);
}
}
// MainAbstrak.java
public class MainAbstrak {
public static void main(String [] args) {
Student S = new Student("Delpiero", "Sistem Informasi");
System.out.println(S.getDescription());
Employee E = new Employee("Nesta", 2500000);
System.out.println(E.getDescription());
}
}
Hasil Output
a student name Delpiero majoring in Sistem Informasi
an employee name Nesta with a salary of 2500000.0
INTERFACE
Interface adalah prototipe kelas yang berisi definisi konstanta dan deklarasi method (hanya nama
method tanpa implementasi). Interface terdiri dari:
· Semua atribut adalah public, static, dan final (semua atribut bertindak sebagai konstanta)
· Semua method adalah abstract dan public
· Tidak boleh ada deklarasi konstruktor
Interface digunakan untuk menyatakan spesifikasi fungsional beberapa kelas secara umum. Dengan
adanya interface, Java menyediakan sebuah fitur untuk pewarisan jamak (multiple inheritance).
Berikut adalah contoh interface:
Gambar 5. 6 Contoh kelas diagram interface start stop dan kelas implements-nya
Implementasi dari kelas diagram di atas pada Java adalah sebagai berikut:
10. Modul PBO – Teknokrat
48
Program 5-4
// StartStop.java
public interface StartStop {
public void start();
public void stop();
}
// Car.java
public class Car implements StartStop {
private String name;
public Car(String name) {
this.name = name;
}
public void start() {
System.out.println("Insert key into ignition and turn");
}
public void stop() {
System.out.println("Turn key and remove from ignition");
}
public String getName() { return name; }
}
// washingMachine.java
public class WashingMachine implements StartStop {
private String name;
public WashingMachine(String name) {
this.name = name;
}
public void start() {
System.out.println("Push button and turn right");
}
public void stop() {
System.out.println("Turn left and push button");
}
public String getName() { return name; }
}
11. Modul PBO – Teknokrat
49
// MainInterface.java
public class MainInterface {
public static void main(String [] args) {
Car c = new Car("Ertiga");
System.out.println(c.getName());
System.out.print("Start: ");
c.start();
System.out.print("Stop : ");
c.stop();
WashingMachine w = new WashingMachine("Sanyo");
System.out.println("n"+w.getName());
System.out.print("Start: ");
w.start();
System.out.print("Stop : ");
w.stop();
}
}
Hasil Output
Ertiga
Start: Insert key into ignition and turn
Stop : Turn key and remove from ignition
Sanyo
Start: Push button and turn right
Stop : Turn left and push button
12. Modul PBO – Teknokrat
50
Lembar Kerja Praktikum: Modul 5
NPM: Asisten:
Nama: Nilai:
Kelas: Tanggal:
Soal
[Score: 100] Perhatikan kelas diagram berikut:
13. Modul PBO – Teknokrat
51
Ketentuan:
· Kelas pegawai adalah kelas abstrak
· Gaji pokok ditentukan berdasarkan golongan:
o Golongan = ’A’, gaji pokok = 3.000.000
o Golongan = ’B’, gaji pokok = 2.000.000
o Golongan = ’C’, gaji pokok = 1.000.000
· Uang lembur dihitung dari jam lembur x 30.000
· Seorang pegawai dianggap lembur jika jam kerja > 8
· Gaji Bersih = Gaji Pokok + Uang Lembur
Buatlah kode program Java dari kelas diagram di atas.