Rabu, 15 Desember 2010

INHERITANCE

0

Semua class dalam Java, termasuk class yang membangun Java API,merupakan subclass dari superclass Object.
Contoh dari hierarki class :



Pewarisan (inheritance)

Superclass adalah class yang letaknya di atas class tertentu di dalam hierarki.
Subclass adalah class yang letaknya di bawah class tertentu di dalam hierarki.
Keuntungan penggunaan Inheritance dalam OOP : Reusability
  1. Ketika behavior(method) dideklarasikan dalam superclass, behavior tersebut otomatis diwariskan ke seluruh subclass
  2. Jadi, Anda dapat meng-enkode method hanya sekali dan method tersebut dapat digunakan oleh seluruh subclass
  3. Sebuah subclass hanya perlu mengimplementasikan perbedaan antara dirinya sendiri dan parent-nya
Untuk mengambil sebuah class, gunakan keyword extends.
Untuk lebih jelasnya, mari buat class parent sederhana, misalkan kita mempunyai class parent bernama Person.
public class Person {
    protected String name;
    protected String address;

    /**
     * Default constructor 
     */
    public Person(){
        System.out.println(“Inside Person:Constructor”);
        name = ""; address = "";
    }
    . . . .
Sekarang, kita buat class lain bernama Student

Karena murid juga termasuk orang, kita putuskan untuk meng-extend class Person, sehingga kita dapat mewariskan semua properti dan method yang telah ada di class Person.

Untuk itu, kita bisa menulis :
public class Student extends Person {
     public Student(){
        System.out.println(“Inside Student:Constructor”);
    }
    . . . .
}

Ketika sebuah object Student diinstansiasi, default constructor dari superclass Student dipanggil secara implisit untuk melakukan inisialisasi seperlunya.
Setelah itu, pernyataan di dalam constructor subclass dijalankan.
Untuk memperjelasnya, perhatikan kode dibawah ini, 
public static void main( String[] args ){
    Student anna = new Student();
}  

Dalam kode ini, kita membuat sebuah object dari class Student. Hasil dari program adalah:
Inside Person:Constructor
Inside Student:Constructor

Flowchart program ditampilkan dibawah ini :
 
Keyword “super” 

Sebuah subclass dapat juga memanggil secara eksplisit sebuah constructor superclass yang ada diatasnya. 
Dapat dilakukan dengan menggunakan pemanggilan constructor super.  
Pemanggilan constructor super didalam constructor subclass akan mengakibatkan eksekusi dalam constructor yang relevan dari superclass, berdasarkan passing argument-nya.
Sebagai contoh, pada contoh sebelumnya yaitu class Person dan Student, kita tunjukkan sebuah contoh pemanggilan constructor super.

Tuliskan kode berikut untuk class Student
public Student(){
    super( "SomeName", "SomeAddress" );
     System.out.println("Inside     Student:Constructor");
  
Beberapa hal untuk diingat ketika menggunakan pemanggilan constructor super :
  1. Pemanggilan super() HARUS DIJALANKAN SESUAI DENGAN STATEMENT PERTAMA DALAM SEBUAH CONSTRUCTOR.
  2. Pemanggilan super() hanya dapat digunakan di dalam definisi constructor.
  3. Hal ini menjelaskan bahwa constructor this() dan pemanggilan super() TIDAK DAPAT DIJALANKAN SECARA BERSAMAAN DI DALAM CONSTRUCTOR YANG SAMA.
Penggunaan lainnya dari super mengarah pada member dari superclass.
Sebagai contoh,
public Student() {
    super.name = “somename”;
    super.address = “some address”;
}

Meng-override method

Jika sebuah subclass menginginkan implementasi yang berbeda terhadap method dari superclassnya, maka salah satu caranya dapat dilakukan dengan meng-override method bersangkutan.
Sebuah subclass dapat meng-override method superclassnya dengan menyediakan sebuah implementasi baru untuk method tersebut. Berikut ini merupakan implementasi dari method getName didalam superclass Person
public class Person {
    :
    :
    public String getName(){
        System.out.println("Parent: getName");
        return name;
    }
}

Untuk meng-override method getName dari superclass Person, di dalam subclass Student, kita tulis : 
public class Student extends Person{
    :
    :
    public String getName(){
        System.out.println("Student: getName");
        return name;
    }
    :

Sekarang, ketika kita memanggil method getName dari object subclass Student, method getName yang di-override akan dipanggil, dan hasilnya akan menjadi,
Student: getName  

Class final
Final Class adalah Class yang tidak bisa di-extends
Untuk mendeklarasikan final class, kita tulis,
        public final ClassName{
        . . .
    }

Contoh:
public final class Person {
    . . .
}

Contoh lain dari final class adalah class wrapper dan String.

Class dan method final

Method Final adalah Method yang tidak bisa di-override
Untuk mendeklarasikan final method, kita tulis,

     public final [returnType]     [methodName]([parameters]){
        . . .
    } 


method static secara otomatis merupakan method final.
contoh :

public final String getName(){
     return name;
}

0 komentar:

Posting Komentar

 
Design by ThemeShift | Bloggerized by Lasantha - Free Blogger Templates | Best Web Hosting