PENGENALAN PEMROGRAMAN 1

MODUL PRAKTIKUM 

Pewarisan, Polymorphism Dan Interface 
 Versi 1.3 

JAVA EDUCATION NETWORK INDONESIA

Interface mendefinisikan sebuah(signature) dari sebuah kumpulan method tanpa tubuh. Pewarisan adalah keuntungan besar dalam pemrograman berbasis object karena suatu sifat atau method didefinisikan dalam superclass. Contoh hirarki class diperlihatkan di bawah ini. Subclass hanya butuh mengimplementasikan perbedaannya sendiri dan induknya. sifat ini secara otomatis diwariskan dari semua subclasses. Anda dapat menuliskan kode method hanya sekali dan mereka dapat digunakan oleh semua subclass. Class ini dinamakan subclass dan induk class dinamakan superclass. Jadi. kita akan membicarakan bagaimana suatu class dapat mewariskan sifat dari class yang sudah ada. Interface adalah jenis khusus dari blok yang hanya berisi method signature(atau constant ). Pada akhirnya. Sifat ini dinamakan polimorfisme. Kita juga akan membicarakan sifat khusus dari Java dimana kita dapat secara otomatis memakai method yand tepat untuk setiap object tanpa memperhatikan asal dari subclass object.Modul Praktikum Pewarisan. termasuk class yang membangun Java API. Beberapa class di atas class utama dalam hirarki class dikenal sebagai superclass. Polimorfisme. Dalam Java. Interface mendefinisikan sebuah cara standar dan umum dalam menetapkan sifat-sifat Versi 1. Latar Belakang Dalam bagian ini. adalah subclasses dari superclass Object. • • • Tujuan Mendefinisikan superclasses dan subclasses Override method dari superclasses Membuat method final dan class final 2. dan Interface 1. kita akan mendiskusikan tentang interface yang membantu mengurangi penulisan program. semua class. Sementara beberapa class di bawah class pokok dalam hirarki class dikenal sebagai subclass dari class tersebut.3 Page | 1 .

untuk mengimplementasikan sifat-sifat yang umum. Di bawah ini adalah hierarkinya. Contoh lain yang menunjukkan properti polimorfisme adalah ketika kita mencoba melalui referensi ke method. secara otomatis menunjuk method yang tepat untuk menggunakannya ke particular object berdasar subclass yang termasuk di dalamnya. Polimorfisme.3 Page | 2 .Modul Praktikum Pewarisan. tanpa memperhatikan lokasinya dalam hirarki class. Polimorfisme menyediakan multiobject dari subclasses yang berbeda untuk diperlakukan sebagai object dari superclass tunggal. Versi 1. Mereka menyediakan class-class. dikarenakan program dapat memanggil method interface dan versi yang tepat dari method yang akan dieksekusi tergantung dari tipe object yang melewati pemanggil method interface. Dengan catatan bahwa interface-interface juga menunjukkan polimorfisme. Sekarang. kita dapat me-referensi dari tipe Employee dan tipe Student ke method ini selama itu masih subclass dari class Person. dan Interface dari class-class. kita tambahkan subclass lain dari Person yaitu Employee. kita dapat membuat referensi yang merupakan tipe dari superclass ke sebuah object dari subclass tersebut. Kemampuan dari referensi untuk mengubah sifat menurut object apa yang dijadikan acuan dinamakan polimorfisme. Misalkan kita punya method statis printInformation yang mengakibatkan object Person sebagai referensi. Person Student Employee Dalam Java. class induk Person dan subclass Student dari contoh sebelumnya.

/** * Default constructor */ public Person(){ System. dan Interface 3. String address) { this.name = name.address = address. Percobaan Percobaan 1 Mendefinisikan Subclass dan Superclass : public class Person { protected String name. protected String address. } public String getAddress() { return address. Polimorfisme. } public void setName(String name) { this. } } Versi 1. } /** * Constructor dengan dua parameter */ public Person( String name.println("Inside Person:Constructor"). name = "". } public void setAddress(String add) { this. address = "".name = name.Modul Praktikum Pewarisan.out. this.3 Page | 3 .address = add. } /** * Method accessor */ public String getName() { return name.

out. } public void setKeterangan (String d){ keterangan=d. // jumlah default untuk semua Pakaian private static int UNIQUE_ID=0. } public String getKeterangan(){ return keterangan. } public int getID() { return ID. } public static void main( String[] args) { Student anna = new Student().3 Page | 4 . //super(). //Static member ditambahkan dalam //constructor //untuk menghasilkan ID yang unik public Pakaian() { ID=UNIQUE_ID++.println("Inside Student:Constructor").0.name = "name". // default private double harga = 0. // Harga default untuk semua Pakaian private int jmlStok = 0. "SomeAddress"). Polimorfisme. } Versi 1. // Default ID untuk semua Pakaian private String keterangan = "-keterangan diperlukan-".Modul Praktikum Pewarisan. dan Interface public class Student extends Person{ public Student() { //super( "SomeName". } } Percobaan 2 Superclass dan Subclass : public class Pakaian { private int ID = 0. System. //super.

System.println("Jumlah stok: " + getJmlStok()). System. } public void setJmlStok (int q){ jmlStok=q. G=Hijau. B=Biru.0).out.setJmlStok(5). Polimorfisme. public Baju(){ super. super.println("Harga baju: " + getHarga()).3 Page | 5 .println("ID Baju: " + getID()). dan Interface public void setHarga(double p) { harga = p.Modul Praktikum Pewarisan. } public double getHarga() { return harga. } } public class Baju extends Pakaian { //Kode Warna R=Merah.tampilInformasiBaju(). b.out. } }//akhir kelas Versi 1. } //Method ini menampilkan nilai untuk suatu item public void tampilInformasiBaju(){ System.out.setKeterangan("biru"). System. super. System.println("Keterangan: " + getKeterangan()).out.out. U=Belum Ditentukan public char kodeWarna = 'U'.println("Kode Warna: " + kodeWarna). } public int getJmlStok(){ return jmlStok. }//akhir method display public static void main(String args[]){ Baju b=new Baju().setHarga(1500.

"SomeAddress"). name = "".name = name. protected String address.println("Inside Person:Constructor"). this.name = name. address = "".Modul Praktikum Pewarisan. /** * Default constructor */ public Person(){ System. return name. String address) { this. Polimorfisme.address = address. Versi 1.out. } public String getAddress() { return address.out. } /** * Constructor dengan dua parameter */ public Person( String name. } public void setAddress(String add) { this. } } public class Student extends Person{ public Student() { //super( "SomeName".address = add.3 Page | 6 . } /** * Method accessor */ public String getName() { System. dan Interface Percobaan 3 Polimorphisme : Public class Person { protected String name. } public void setName(String name) { this.println("Person Name : " +name).

println(temp).out. //Person menunjuk kepada object Employee temp = ref.name = "name".println("Student Name : " +name).println(temp). Polimorfisme.out. } } public class Employee extends Person{ public String getName() { System. dan Interface //super().Modul Praktikum Pewarisan. //getName dari Student class dipanggil System. } } Versi 1. ref = employeeObject. } public static void main(String[] args) { Person ref.getName().out. } public String getName() { System.3 Page | 7 .out. ref = studentObject. System.out. } public static void main( String[] args) { Student anna = new Student(). //getName dari Employee class dipanggil System. return name. Employee employeeObject = new Employee(). //Person menunjuk kepada object Student String temp = ref.println("Employee Name:" +name).getName(). Student studentObject = new Student().println("Inside Student:Constructor"). return name. //super.

println(lantaiSkrg).out.out.println("Berat: " + berat). System. } else { System.Modul Praktikum Pewarisan. } } //pada dunia nyata.println("Pintu akan tetap terbuka sampai seseorang keluar"). } else { System.out. Polimorfisme. if (berat <= KAPASITAS) { bukaPintu = false.3 Page | 8 . dan Interface Percobaan 4 Enkapsulasi: public class PrivateElevator2 { private boolean bukaPintu = false. } } else { Versi 1. } public void naik() { if (!bukaPintu) { if (lantaiSkrg < LANTAI_ATAS) { lantaiSkrg++. private int berat = 0.println("Sudah mencapai lantai atas"). public void buka() { bukaPintu = true. elevator menggunakan sensor berat untuk memeriksa //beban. private int lantaiSkrg = 1. System.out.random()*1500). private final int KAPASITAS = 1000. private final int LANTAI_ATAS = 5. } public void tutup() { hitungKapasitas().out. System. tetapi agar lebih sederhana. private final int LANTAI_BAWAH = 1. kami menggunakan bilangan acak untuk berat private void hitungKapasitas() { berat = (int)(Math.println("Elevator kelebihan beban").

out. } } } else { System. Polimorfisme.println(lantaiSkrg).3 Page | 9 .println("Lantai Salah").out.println("Pintu masih terbuka"). Versi 1. } } public class PrivateElevator2Test { public static void main(String args[]){ PrivateElevator2 privElevator = new PrivateElevator2(). dan Interface System.println("Pintu masih terbuka"). System. } } public void turun() { if (!bukaPintu) { if (lantaiSkrg > LANTAI_BAWAH) { lantaiSkrg--.out.buka().out. } else { turun(). privElevator. } } public void setLantai(int tujuan) { if ((tujuan >= LANTAI_BAWAH)&&(tujuan <= LANTAI_ATAS)) { while (lantaiSkrg != tujuan){ if (lantaiSkrg < tujuan) { naik(). } } else { System. } public boolean getStatusPintu() { return bukaPintu. } else { System.println("Sudah mencapai lantai bawah"). } } public int getLantai() { return lantaiSkrg.Modul Praktikum Pewarisan.out.

out. privElevator. } privElevator. privElevator.out.println("Living Thing breathing.. privElevator.turun(). privElevator.turun(). Polimorfisme."). privElevator. } public void eat(){ System.buka().. } } Percobaan 5 Menampilkan Abstract Class: public abstract class LivingThing { public void breath(){ System. privElevator.setLantai(5).buka().Modul Praktikum Pewarisan.buka().tutup(). privElevator.getStatusPintu()) { privElevator. privElevator.getLantai().println("Living Thing eating.turun(). } /** * abstract method walk * Kita ingin method ini di-overridden oleh subclasses */ public abstract void walk().naik().turun(). privElevator. privElevator.. int lantai = privElevator. if (lantai != 5 && !privElevator. } Versi 1.setLantai(10).turun(). privElevator.naik(). privElevator. dan Interface privElevator.tutup()..").tutup().3 Page | 10 .

Versi 1."). double bLen = ((Line)b).println("Human walks. double x2. } public boolean isLess( Object a.y1 = y1. double y2){ this.getLength(). return (aLen < bLen). return length. public Line(double x1. Polimorfisme.getLength().getLength(). private double y1. Object b){ double aLen = ((Line)a).x1 = x1. double bLen = ((Line)b).3 Page | 11 . Object b){ double aLen = ((Line)a).. this. } public boolean isEqual( Object a. dan Interface public class Human extends LivingThing{ public void walk(){ System.out.Modul Praktikum Pewarisan. private double x2.y2 = y2.getLength().. } public boolean isGreater( Object a. } } Percobaan 6 Interface: public class Line implements Relation{ private double x1. Object b){ double aLen = ((Line)a). private double y2. this. return (aLen > bLen).getLength(). double y1.x2 = x2. this. } public double getLength(){ double length = Math.sqrt((x2-x1)*(x2-x1) + (y2-y1)* (y2-y1)).

} } Relation. public boolean isEqual( Object a.Modul Praktikum Pewarisan. Object b). Object b). Tulis dua subclasses-nya yaitu Circle dan Square. return (aLen == bLen).1 Latihan Extend StudentRecord Dalam latihan ini. Anda dapat menambahkan method tambahan ke dalam subclasses jika diinginkan. } 4. jika Anda benar-benar membutuhkannya.java bertindak sebagai interface public interface Relation { public boolean isGreater( Object a. kita ingin untuk membuat catatan siswa yang lebih khusus yang berisi informasi tambahan tentang pengetahuan komputer siswa.3 Page | 12 . 4. public boolean isLess( Object a. Object b). Versi 1. dan Interface double bLen = ((Line)b). Cobalah untuk meng-override beberapa method yang ada dalam superclass StudentRecord.2 Bentuk Abstract Class Cobalah untuk membuat class abstract yang dinamai Shape dengan method abstract getArea() dan getName(). Tugasnya adalah meng-extend class StudentRecord yang mengimplementasikan pelajaran sebelumnya. 4. Polimorfisme.getLength().

Sign up to vote on this title
UsefulNot useful