bAHASA PEMROGRAMAN I - E

advertisement
2015
BAHASA PEMROGRAMAN I
Pertemuan VI
Inheritance (Pewarisan)
6.1. Tujuan
Mahasiswa diharapkan dapat:
1. Memahami konsep inheritance dalam pemecahan permasalahan.
2. Mengimplementasikan konsep inheritance dalam bentuk program.
6.2. Teori Singkat
Pewarisan (Inheritance) adalah salah satu ciri pemrograman berorientasi objek, yang menyatakan
bahwa suatu kelas dapat diturunkan lagi menjadi kelas-kelas baru lainnya sehingga dapat
membentuk sebuah hirarki.
Dalam Java, semua class adalah subclasses dari superclass Object. Contoh hirarki class
diperlihatkan di bawah ini. Beberapa class di atas class utama dalam hirarki class dikenal sebagai
superclass. Sementara beberapa class di bawah class pokok dalam hirarki class dikenal sebagai
subclass dari class tersebut.
Gambar 1. Hirarki class dalam java
Pewarisan adalah keuntungan besar dalam pemrograman berbasis object karena suatu sifat atau
method didefinisikan dalam superclass, sifat ini secara otomatis diwariskan dari semua subclasses.
Jadi, Anda dapat menuliskan kode method hanya sekali dan mereka dapat digunakan oleh semua
subclass. Subclass hanya perlu mengimplementasikan perbedaannya sendiri dan induknya.
STMIK AMIKOM Yogyakarta
Page 1
2015
BAHASA PEMROGRAMAN I
Mendefinisikan Superclass dan Subclass
Java menyediakan kata kunci extends yang digunakan untuk melakukan proses penurunan
terhadap suatu kelas. Bentuk umum dari penggunaan kata kunci tersebut sebagai berikut:
public class SuperClass {
…
}
public class SubClass extends SuperClass {
…
}
Untuk mengilustrasikan ini, kita akan membuat contoh class induk atau superclass. Dimisalkan
kita mempunyai class induk yang dinamakan Person.
public class Person{
protected String name;
protected String address;
//Default constructor
public Person(){
System.out.println(“Inside Person:Constructor”);
name = "";
address = "";
}
//Constructor dengan dua parameter
public Person( String name, String address ){
this.name = name;
this.address = address;
}
//Method accessor
public String getName(){
return name;
}
public String getAddress(){
return address;
}
public void setName( String name ){
this.name = name;
}
public void setAddress( String add ){
this.address = add;
}
}
Perhatikan bahwa atribut name dan address dideklarasikan sebagai protected. Alasannya adalah
agar atribut-atribut ini dapat diakses oleh subclasses dari superclassess. Jika kita
mendeklarasikannya sebagai private, subclasses tidak dapat menggunakannya. Catatan bahwa
STMIK AMIKOM Yogyakarta
Page 2
2015
BAHASA PEMROGRAMAN I
semua properti dari superclass yang dideklarasikan sebagai public, protected dan default
dapat diakses oleh subclasses-nya.
Selanjutnya apabila ingin membuat class lain bernama Student. kita putuskan hanya dengan mengextends class Person karena Student juga sebagai Person, sehingga kita dapat mewariskan semua
properti dan method dari setiap class Person yang ada. Contohnya adalah:
public class Student extends Person{
public Student(){
System.out.println(“Inside Student:Constructor”);
//beberapa kode di sini
}
}
Ketika object Student di-instantiate, default constructor dari superclass secara mutlak meminta
untuk melakukan inisialisasi yang seharusnya. Setelah itu, pernyataan di dalam subclass
dieksekusi. Untuk mengilustrasikannya, perhatikan kode berikut:
public static void main( String[] args ){
Student anna = new Student();
}
Dalam kode ini, kita membuat sebuah object dari class Student. Keluaran dari program adalah,
Inside Person:Constructor
Inside Student:Constructor
Alur program ditunjukkan sebagai berikut.
Gambar 2. Alur Program
STMIK AMIKOM Yogyakarta
Page 3
2015
BAHASA PEMROGRAMAN I
Latihan 1. SuperClass dan SubClass
Karyawan.java
public class Karyawan {
protected String nama, tglLahir;
protected double gaji;
public Karyawan () {
nama = “”;
tglLahir = “”;
gaji = 0;
}
public void tampilData () {
System.out.println(“Nama
: ” + nama);
System.out.println(“Tgl Lahir : ” + tglLahir);
System.out.println(“Gaji
: ” + gaji);
}
}
Selanjutnya compile file dengan perintah javac
Manager.java
Public class Manager extends Karyawan{
private String departemen;
public Manager (String nm, String tglLahir, double gaji, String dept)
{
//variabel nama, tglLahir, gaji mewarisi class Karyawan
nama = nm;
this.tglLahir=tglLahir; this.gaji=gaji; departemen=dept;
}
public String getDepartemen () {
return departemen;
}
}
Selanjutnya compile file dengan perintah javac
Demo.java
Public class Demo {
public static void main (String [] args) {
Manager m = new Manager (“Putri”,“15 Okt 2015”, 1000000,”HRD”)
m.tampilData();
System.out.println(“Departemen : ” + m.getDepartemen());
}
}
Selanjutnya compile file dengan perintah javac dan java
STMIK AMIKOM Yogyakarta
Page 4
2015
BAHASA PEMROGRAMAN I
Kata Kunci Super
Subclass juga dapat memanggil constructor secara eksplisit dari superclass terdekat. Hal ini
dilakukan dengan pemanggil construktor super. Pemanggilan constructor super dalam constructor
dari subclass akan menghasilkan eksekusi dari superclass constructor yang bersangkutan, berdasar
dari argumen sebelumnya. Sebagai contoh, pada contoh class sebelumnya. Person dan Student,
kita tunjukkan contoh dari pemanggil constructor super. Contohnya adalah:
public Student(){
super( "SomeName", "SomeAddress" );
System.out.println("Inside Student:Constructor");
}
Kode ini memanggil constructor kedua dari superclass terdekat (yaitu Person) dan
mengeksekusinya. Contoh kode lain ditunjukkan sebagai berikut:
public Student(){
super();
System.out.println("Inside Student:Constructor");
}
Kode ini memanggil default constructor dari superclass terdekat (yaitu Person) dan
mengeksekusinya.
Ada beberapa hal yang harus diingat ketika menggunakan pemanggil constuktor super:
1. Pemanggil super() HARUS DIJADIKAN PERNYATAAN PERTAMA DALAM
constructor.
2. Pemanggil super() hanya dapat digunakan dalam definisi constructor.
3. Termasuk constructor this() dan pemanggil super() TIDAK BOLEH TERJADI
DALAM constructor YANG SAMA.
Pemakaian lain dari super adalah untuk menunjuk anggota dari superclass(seperti reference this).
Sebagai contoh:
public Student(){
super.name = “somename”;
super.address = “some address”;
}
STMIK AMIKOM Yogyakarta
Page 5
2015
BAHASA PEMROGRAMAN I
Latihan 2. Kata Kunci Super
Siswa.java
public class Siswa{
protected String nama;
protected String nim;
public Siswa(){
nama = "";
nim = "";
}
public Siswa(String nama,String nim){
this.nama = nama;
this.nim = nim;
}
public void tampilSiswa(){
System.out.println("Nama = " + nama);
System.out.println("Nim = " + nim);
}
}
Selanjutnya compile file dengan perintah javac
DataSiswa.java
public class DataSiswa extends Siswa{
private int umur;
public DataSiswa(String nama,String nim, int umur){
super(nama,nim);//memanggil constructor Siswa
this.umur = umur;
}
public int getUmur(){
return umur;
}
}
Selanjutnya compile file dengan perintah javac
DemoSiswa.java
public class DemoSiswa {
public static void main(String[] args){
DataSiswa a = new DataSiswa("Zakky","14.12.1111",18);
a.tampilSiswa();
System.out.println("Umur = " + zakky.getUmur());
}
}
Selanjutnya compile file dengan perintah javac dan java
STMIK AMIKOM Yogyakarta
Page 6
2015
BAHASA PEMROGRAMAN I
Overriding Method
Untuk beberapa pertimbangan, terkadang class asal perlu mempunyai implementasi berbeda dari
method yang khusus dari superclass tersebut. Oleh karena itulah, method overriding digunakan.
Subclass dapat mengesampingkan method yang didefinisikan dalam superclass dengan
menyediakan implementasi baru dari method tersebut. Misalnya kita mempunyai implementasi
berikut untuk method getName dalam superclass Person,
public class Person{
...
...
public String getName(){
System.out.println("Parent: getName");
return name;
}
...
}
Untuk override, method getName dalam subclass Student,
public class Student extends Person{
...
...
public String getName(){
System.out.println("Student: getName");
return name;
}
...
}
Jadi, ketika kita meminta method getName dari object class Student, method overridde akan
dipanggil, keluarannya akan menjadi:
Student: getName
STMIK AMIKOM Yogyakarta
Page 7
2015
BAHASA PEMROGRAMAN I
Latihan 3. Overriding Method
Induk.java
class Induk {
private int a;
public int getA(){
return a;
}
public void setA(int nil){
a = nil;
}
public void tampilNilai(){
System.out.println("Nilai a = " + getA());
}
}
Selanjutnya compile file dengan perintah javac
Anak.java
class Anak extends Induk {
private int b;
public int getB() {
return b;
}
public void setB(int y) {
b = y;
}
//override method tampilNilai() pada class Induk
public void tampilNilai() {
super.tampilNilai();
System.out.println(“Nilai b = ” + getB());
}
}
Selanjutnya compile file dengan perintah javac
Tampil,java
public class Tampil {
public static void main (String [] args) {
Anak ank = new Anak();
ank.setA(80);
ank.setB(90);
ank.tampilNilai();
}
}
Selanjutnya compile file dengan perintah javac dan java
STMIK AMIKOM Yogyakarta
Page 8
2015
BAHASA PEMROGRAMAN I
Method final dan class final
Dalam Java, memungkinkan untuk mendeklarasikan class-class yang tidak lama menjadi subclass.
Class ini dinamakan class final. Untuk mendeklarasikan class untuk menjadi final kita hanya
menambahkan kata kunci final dalam deklarasi class. Sebagai contoh, jika kita ingin class Person
untuk dideklarasikan final, contoh kodenya adalah:
public final class Person{
//area kode
}
Beberapa class dalam Java dideklarasikan secara final untuk memastikan sifatnya tidak dapat dioverride. Contoh-contoh dari class ini adalah Integer,
Double,
dan
String.
Ini
memungkinkan dalam Java membuat method yang tidak dapat di-override. Method ini dapat kita
panggil method final. Untuk mendeklarasikan method untuk menjadi final, kita tambahkan kata
kunci final ke dalam deklarasi method. Contohnya, jika kita ingin method getName dalam class
Person untuk dideklarasikan final,
public final String getName(){
return name;
}
Method static juga secara otomatis final. Ini artinya Anda tidak dapat membuatnya override.
Tugas Kelompok ( Max 3 Orang)
Buatlah program untuk menghitung keliling dan luas lingkaran, buat class
GeometriInheritanceXXXX sebagai superclass yang menampung variabel r (jari-jari) serta buat
class LingkaranXXXX sebagai subclass yang menampung variabel phi. Pada class LingkaranXXXX
buat method untuk menghitung keliling dan luas lingkaran, gunakan kata kunci super pada
constructor dalam mereferensi variabel r (jari-jari).
Keliling Lingkaran = 2 * phi * r
Luas Lingkaran
= phi * r2
STMIK AMIKOM Yogyakarta
Page 9
Download