Hubungan antara class dengan pola pewarisan
​
Memahami arti superclass dan subclass
​
Mendefinisikan Superclass dan Subclass untuk memperoleh suatu class,kita menggunakan kata kunci extend.Untuk mengilustrasikan ini, kita akan membuat contoh class induk. Dimisalkan kita mempunyai class induk yang dinamakan Person.
​
Listing Program
​
public class Person
{
protected String name;
protected String address;
public Person(){
System.out.println(“Inside Person:Constructor”);
name = "";
address = "";
}
public Person(String name,String address ){
this.name = name;
this.address = address;
}
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:
-
name dan address dideklarasikan sebagai protected.
-
atribut-atribut ini untuk bisa diakses oleh sub classes dari -superclassess.
-
public, protected dan default dapat diakses oleh sub classes-nya.
​
Sekarang, kita ingin membuat class lain bernama Student.
Karena Student juga sebagai Person, kita putuskan hanya meng-extend class Person, sehingga kita dapat mewariskan semua property dan method dari setiap class Person yang ada. Untuk melakukan ini kita tulis,
​
Listing Program
​
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 super class secara mutlak meminta untuk melakukan inisialisasi yang seharusnya. Setelah itu, pernyataan di dalam sub class dieksekusi. Untuk mengilustrasikannya, perhatikan kode berikut,
Listing Program
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
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
Construtor
Telah tersirat pada pembahasan sebelumnya, Constructor sangatlah penting pada pembentukan sebuah object. Constructor adalah method dimana seluruh inisialisasi object ditempatkan.
Berikut ini adalah property dari Constructor:
-
Constructor memiliki nama yang sama dengan class
-
Sebuah Constructor mirip dengan method pada umumnya, namun hanya informasi–informasi berikut yang dapat ditempatkan pada header sebuah constructor, scope atau identifikasi pengaksesan (misal:public), nama dari konstuktor dan parameter.
-
Constructor tidak memiliki return value
-
Constructor tidak dapat dipanggil secara langsung, namun harus dipanggil dengan menggunakan operator new pada pembentukan sebuah class.
Untuk mendeklarasikan constructor, kita tulis,
Sintaks mendeklarasikan consturctor
​
<modifier><className>(<parameter>*)
{
<statement>*
}
​
Default Constructor
Setiap class memiliki default constructor. Sebuah default constructor adalah constructor yang tidak memiliki parameter apapun. Jika sebuah class tidak memiliki constructor apapun, maka sebuah default constructor akan dibentuk secara implicit.
Sebagai contoh, pada class StudentRecord, bentuk default constructor akan terlihat seperti dibawah ini :
​
Public StudentRecord()
{
//area penulisan kode
}
​
Menggunakan Constructor
Untuk menggunakan constructor, kita gunakan kode–kode sebagai berikut:
Listing Program
Public static void main(String[]args)
{
//membuat3objek
StudentRecord annaRecord=newStudentRecord("Anna");
StudentRecord beahRecord=newStudentRecord("Beah","Philippines"); StudentRecord crisRecord=newStudentRecord(80,90,100);
//area penulisan kode selanjutnya
}
​
Sebelum kita lanjutkan, mari kita perhatikan kembali deklarasi variabel static studentCount yang telah dibuat sebelumnya.Tujuan deklarasi studentCount adalah untuk menghitung jumlah object yang dibentuk pada class StudentRecord. Jadi, apa yang akan kita lakukan selanjutnya adalah menambahkan nilai dari studentCount setiap kali setiap pembentukan object pada class StudentRecord. Lokasi yang tepat untuk memodifikasi dan menambahkan nilai studentCounter letak pada constructor-nya, karena selalu dipanggil setiap kali obyek terbentuk.
Pemanggilan Constructor Dengan this()
Pemanggilan constructor dapat dilakukan secara berangkai, dalam arti Anda dapat memanggil constructor di dalam constructor lain. Pemanggilan dapat dilakukan dengan referensi this(). Perhatikan contoh kode sebagai berikut:
Listing Program
public StudentRecord(){
this("some string");
}
public StudentRecord(String temp){
this.name = temp;
}
public static void main( String[] args )
{
StudentRecord annaRecord = new StudentRecord();
}
​
Dari contoh kode diatas, pada saat baris ke 13 dipanggil akan memanggil constructor dasar pada baris pertama. Pada saat baris kedua dijalankan, baris tersebut akan menjalankan constructor yang memiliki parameter String pada bariske-6.
Beberapa hal yang patut diperhatikan pada penggunaan this() :
-
Harus dituliskan pada baris pertama pada sebuah constructor,
-
Hanya dapat digunakan pada satu definisi constructor. Kemudian metode ini dapat diikuti dengan kode–kode berikutnya yang relevan.
​
​
Kata kunci super
Subclass juga dapat memanggil constructor secara eksplisit dari superclass terdekat. Hal ini dilakukan dengan pemanggil constructor super. Pemanggil constructor super dalam constructor dari subclass akan menghasilkan eksekusi dari superclass constructor yang bersangkutan, berdasar dari argument sebelumnya. Sebagai contoh, pada contoh class sebelumnya. Person dan Student, kita tunjukkan contoh dari pemanggil constructor super. Diberikan kode berikut untuk Student,
​
Sintaks kunci super
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,
Listing Program
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:
a. Pemanggil super() harus dijadikan pernyataan pertama dalam constructor.
b. Pemanggil super() hanya dapat digunakan dalam definisi constructor.
c. Termasuk constructor this() dan pemanggil super() tidak boleh terjadi dalam constructor yang sama.
​
Pemakaian lain dari supe radalah untuk menunjuk anggota dari superclass (seperti reference this). Sebagai contoh,
Listing Program
public Student()
{
super.name = “somename”;
super.address = “some address”;
}
​
Subclass juga dapat memanggil constructor secara eksplisit dari superclass terdekat. Hal ini dilakukan dengan pemanggil constructor super. Pemanggil constructor super dalam constructor dari subclass akan menghasilkan eksekusi dari superclass constructor yang bersangkutan. Pemanggil super() hanya dapat digunakan dalam definisi constructor. 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).
​
Metode Overloading
Overloading adalah suatu keadaan dimana beberapa method sekaligus dapat mempunyai nama yang sama, akan tetapi mempunyai fungsionalitas yang berbeda. Overloading ini dapat terjadi pada class yang sama atau pada suatu parent class dan subclass-nya. Overloading mempunyai ciri-ciri sebagai berikut:
-
Nama method harus sama
-
Daftar parameter harus berbeda
-
Return type boleh sama, juga boleh berbeda
​
Overriding Method
Overriding adalah suatu keadaan dimana method pada subclass menolak method pada parent class-nya. Overriding mempunyai ciri-ciri sebagai berikut:
-
Nama method harus sama
-
Daftar parameter harus sama
-
Return type harus sama
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,
​
Listing Program
public class Person
{ :
public String getName()
{
System.out.println("Parent: getName");
return name;
}
}
Untuk override, method getName dalam subclass Student, kita tulis,
Listing Program
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
Method final dan classfinal
Dalam Java, juga 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, kita tulis,
public final class Person
{
//area kode
}
​
Beberapa class dalam Java API dideklarasikan secara final untuk memastikan sifatnya tidak dapat di-override. 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 kedalam deklarasi method. Contohnya, jika kita ingin method getName dalam class Person untuk dideklarasikan final, kita tulis,
​
Sintaks getName
public final String getName(){
return name;
}
Method static juga secara otomatis final.Ini artinya Anda tidak dapat membuatnya override.
​
​
​
​
Belajar OOP (Overriding dan keyword super)
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​