You are on page 1of 12

Pewarisan (Inheritance)

Pada bab sebelumnya telah dijelaskan mengenai Kelas dan objek sebagai fundamental OOP, bab ini akan
menguraikan sifat OOP yang sangat berperan pada fitur reusable pada desain kelas diagram berbasis
Object(OO), yaitu inheritance. Ide dasar dari sifat inheritance pada OOP adalah membuat kelas baru
yang dibangun dari kelas – kelas yang sudah ada. Artinya kelas baru tersebut mewarisi semua field dan
behavior dari kelas lain. Sehingga bisa dikatakan kelas baru tersebut juga berjenis kelas yang diwarisinya.

Hirarki Class, Superclass, dan Subclass.

Salah satu relasi antar kelas dalam desain diagram yang sering terjadi adalah inheritance, dimana suatu
kelas mewarisi kelas lain. Hali ini dapat terjadi sampai beberapa kelas hingga membentuk Hirarki kelas
secara inheritance(Hirarki pewarisan kelas)

Semakin Generic
dan Abstract Pegawai
Superclass

Manager Sekretaris Programmer

Eksekutif
Manager

Semakin Spesifik Subclass

Istilah Pada hirarki diatas :

 Superclass : Kelas yang mewariskan data dan methodnya kepada kelas lain. Kelas ini disebut
juga sebagai ParentClass
 Subclass : Kelas yang mewarisi data dan method dari Superclass
Sifat dari hirarki pewarisan pada kelas diagram tersebut semakin ke atas semakin generic dan abstract
(digunakan pada pemrograman generic). Relasi pada kelas diagram tersebut merupakan jenis relasi
“ADALAH ” maka bisa dikatakan Programmer ADALAH Pegawai,Sekretaris ADALAH Pegawai,
Eksekutif Manager ADALAH Manager dan juga ADALAH pegawai

Sifat Inheritance pada java

 Subclass mewarisi data dan method dari Superclassnya (untuk modifier yang visible : public dan
protected)
 Subclass dapat menjalankan method dari Superclass (untuk modifier yang visible : public dan
protected) tetapi tidak berlaku sebaliknya
 Methode Superclass implementasinya dapat diOverride oleh Subclassnya (kecuali untuk method
yang final dan private)
 Penggunaan kata kunci “super” di dalam Subclass untuk mengakses anggota Superclass (data
maupun methode) dan juga bisa untuk memanggil konstruktor Superclass
 Semua kelas dapat diturunkan kecuali untuk kelas yang final
 Java tidak mendukung Multiple Inheritance

Cara membuat kelas turunan (Subclass)

[access modifier] Class [namaKelasAnak] extends [namaKelasInduk] {

Tingkat Akses Protected

Pada bab sebelumnya kita telah mengenal akses private dimana method – method dan data yang diberikan
akses private dalam suatu kelas hanya bisa diakses oleh kelas itu sendiri.Lingkungan diluar kelas tersebut
bahkan turunannya pun tidak dapat mengakses method dan data private tersebut. Namun pada kasus –
kasus tertentu kita membutuhkan data yang hanya bisa diakses oleh kelas yang memiliki hubungan
turunan (se-package ataupun lain package) atau kelas lain yang se-package.pada situasi ini kita dapat
menggunakan tingkat akses protected sehingga data dan method tersebut bisa diakses oleh kelas yang
memiliki hubungan turunan (se-package ataupun lain package) atau kelas lain yang se-package.
Overriding Method

Pada saat kita mendefinisikan suatu method di dalam kelas turunan (subclass) yang nama dan daftar
parameternya sama persis dengan yang terdapat pada kelas induk (superclass )maka dikatakan kita telah
melakukan overriding method. Dengan melakukan overriding method maka method yang akan dieksekusi
oleh objek kelas turunan adalah method yang berada pada kelas turunan tersebut bukan method yang
berada pada kelas induk. Penggunaan override yaitu jika kita ingin mendefinisikan lain suatu method di
dalam kelas induk.

Public class A
{
Public void getDeskripsi()
{
System.out.println(“method A”);
}

Public class B extends A


{

@override
Public void getDeskripsi()
{
System.out.println(“method B”);
}

Kata kunci “ super ”


Pada inheritance kata kunci “super” digunakan untuk memanggil konstruktor kelas induk dan juga bisa
digunakan untuk mengakses method – method dan data pada kelas induk yang visible (akses public atau
protected).

Pemanggilan method kelas induk :

super.[nama method kelas induk]([argumen])

Pemanggilan konstruktor kelas induk :

super([argumen])

Abstract Class

Pada hirarki kelas inheritance pegawai telah kita ketahui bahwa semakin keatas tingkatanya maka
sifatnya akan semakin abstract atau bisa dikatakan bersifat umum. Maka bisa dikatakan perluasan dari
kelas pegawai adalah kelas person, dimana manager adalah pegawai dan juga adalah person. Begitu juga
dengan Programmer dan sekretaris, maka dengan perluasan hingga abstract terdapat data - data dari kelas
– kelas tersebut yang bersifat umum seperti data nama. Nama dimiliki oleh person maka pegawai pun
mempunyai
public nama,begitu
abstract juga programmer,manager
class Person { dan sekretaris. Maka kelas person dapat dibuat
abstract. Kelas abstract dapat mempunyai method yang abstract pula yaitu method yang didalamnya
// membuat kelas abstract
tidak ada implementasi sama sekali, baru akan diimplementasi oleh masing - masing kelas
private String
turunannya.Perlu nama; Method abstract hanya ada pada kelas abstract dan kelas abstract tidak
diperhatikan
dapat di instansiasi.

Membuat abstract class :


// method abstract tanpa implementasi

[access
publicmodifier]
abstractabstract class [nama
String kelas]
getDeskripsi();

Membuat method abstract

[access
publicmodifier]
String [tipe method] [nama
getNama() { //method] ( [parameter]
method )
non abstract

return nama;

public void setNama(String nama) { // method non abstract

this.nama = nama;

}
public class Mahasiswa extends Person {

public Mahasiswa(String nama) {

super.setNama(nama);

@Override // override methode abstract

public String getDeskripsi() {

return super.getNama()+"adalah mahasiswa";

}
Percobaan 1 : Inheritance
Kelas Employee

1 import java.util.*;
2 public class Employee {
3 private String name;
4 private double salary;
5 private Date hireDay;
6
7 public Employee(String name, double salary, int year,int month,int day) {
8 this.name = name;
9 this.salary = salary;
10 GregorianCalendar calendar = new GregorianCalendar(year, month - 1, day);
11 this.hireDay = calendar.getTime();
12 }
13
14 public Date getHireDay() {
15 return hireDay;
16 }
17
18 public String getName() {
19 return name;
20 }
21
22 public double getSalary() {
23 return salary;
24 }
25
26 public void raiseSalary(double byPercent)
27 {
28 double raise = salary * byPercent / 100;
29 salary += raise; }
30

Kelas Manager
1 public class Manager extends Employee {
2
3 private double bonus;
4
5 public Manager(String name, double salary, int year, int month, int day) {
6 super(name, salary, year, month, day);
7 bonus = 0;
8 }
9
10 public void setBonus(double bonus) {

11 this.bonus = bonus;

12 }

13
14 public double getSalary() {

15 double baseSalary = super.getSalary();

16 return baseSalary+bonus;

17 }

18 }
19

Kelas ManagerTest

1 public class ManagerTest {


2
3 public static void main(String[] args) {
4
5 Manager boss = new Manager("Steven Seagel", 80000, 1987, 12, 15);
6 boss.setBonus(5000);
7
8 Employee staff = new Employee("Donni Chen", 50000, 1989, 10, 1);
9
10 System.out.println("nama Boss = " +boss.getName()+",Salary = " +boss.getSalary());
11
12 System.out.println("nama staff = " +staff.getName()+",Salary = " +staff.getSalary());
13 }
14 }

Pertanyaan :
1. Pada ketiga kelas yang telah dibuat, manakah yang merupakan kelas induk, kelas anak dan kelas
utama (main class) ? Apa keluaran dari kelas utama ?
2. Jelaskan maksud dari baris ke 1 kelas Employee?
3. Jelaskan maksud dari baris ke 7-12 kelas Employee?
4. Jelaskan maksud dari baris ke 1 kelas Manager?
5. Jelaskan maksud dari baris ke 6 kelas Manager?
6. Jelaskan maksud dari baris ke 15 kelas Manager?
7. Buatlah method baru bernama getInfo pada kelas manager dengan tipe kembalian String yang
fungsinya untuk memberikan info nama dan hireDay, gunakan key “super” untuk pemanggilan
method kelas induk.
8. Tambah kode pada kelas ManagerTest untuk menampilkan hasil keluaran method pada soal no 6,
melalui objek yang telah ada di kelas ManagerTest
9. Pada ketiga kelas yang telah dibuat method manakah yang teroverride dan milik kelas apa method
tersebut? Dan method manakah yang mengoverride dan milik kelas apa?
10. Ubah access modifier method pada kelas Employee menjadi :
a. Private, apa yang terjadi
b. Protected, apa yang terjadi

Kesimpulan Percobaan:

Percobaan 2 : Abstract Class


Kelas abstract Person

1 public abstract class Person {


2
3 private String name;
4
5 public Person(String name) {
6 this.name = name;
7 }
8
9 public String getName() {
1 return name;
0 }
1
1 public abstract String getDescription();
1
2 }
1
3
1
4
1
5

Kelas Student

1 public class Students extends Person {


2
3 private String college;
4 public Students(String name,String c) {
5 super(name);
6 college = c;
7 }
8
9 public String getDescription() {
10 return "a student study in "+college;
11 }
}

Kelas AbstractTes

1 public class AbstractTes {


2
3 public static void main (String[] args)
4 {
5 Students mahasiswa = new Students("Budi","Informatika");
6 System.out.println(mahasiswa.getDescription());
7
8 }
9 }

Pertanyaan

1. Jelaskan maksud baris ke 1 dan ke 13 pada kelas Person


2. Jelaskan maksud baris ke 4 -7 pada kelas Student
3. Jelaskan hubungan baris ke 9 – 11 pada kelas Student dengan baris 13 pada kelas person
4. Apa hasil keluaran dari kelas utama
5. Tambahkan code di bawah ini pada kelas AbstractTes baris ke 7 ,apakah hasilnya ?

Person andi = new Person(“Andi Virmansyah “) ;


Andi.getName( );

6. Buatlah method abstract bernama getNim pada kelas student. Jalankan main program anda,apa
yang terjadi?

Kesimpulan Percobaan :

You might also like