Inheritance atau Pewarisan adalah salah satu pilar dari tiga pilar Object Oriented Programming atau OOP . Pada pembahasan 3 Pilar tersebut masih sebatas pengenalan awal . Sekarang kita akan membahas Inheritance atau Pewarisan pada pemrograman Java.
Tujuan Dalam bagian ini, kita akan membicarakan bagaimana suatu class dapat mewariskan sifat dari class yang sudah ada. Class ini dinamakan subclass dan induk class dinamakan superclass.
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. Sifat ini dinamakan polimorfisme. Pada akhirnya, kita akan mendiskusikan tentang interface yang membantu mengurangi penulisan program. Pada akhir pembahasan, diharapkan pembaca dapat :
=> Mendefinisikan superclasses dan subclasses
=> Override method dari superclasses .
=> Membuat method final dan class final
Pewarisan Dalam Java
semua class, termasuk class yang membangun Java API, 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. 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.
POINT PERTAMA :
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.
---------------------------------------------------------------------------
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 kita melakukan ini yaitu, kita inginkan atribut-atribut ini untuk bisa diakses oleh subclasses dari superclassess. Jika kita mendeklarasikannya sebagai private, subclasses tidak dapat menggunakannya.
*Catatan : bahwa semua properti dari superclass yang dideklarasikan sebagai public, protected dan default dapat diakses oleh subclasses-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 properti dan method dari setiap class Person yang ada. Untuk melakukan ini, kita tulis,
------------------------------------------------------------
public class Student extends Person {
public Student() {
System.out.println(“Inside Student:Constructor”);
//beberapa kode di sini
}
// 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
POINT KEDUA:
Kata Kunci Super
Subclass juga dapat memanggil constructor secara eksplisit dari superclass terdekat. Hal ini dilakukan dengan pemanggil construktor super. Pemanggil 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. Diberikan kode berikut untuk Student,
---------------------------------------------------------------
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”;
}
-------------------------------------------------
POINT KETIGA:
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, kita tulis,
-----------------------------------------------------------------------
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
POINT KE EMPAT
Method final dan class final
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 ke dalam deklarasi method. Contohnya, jika kita ingin method getName dalam 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 ke dalam deklarasi method. Contohnya, jika kita ingin method getName dalam class Person untuk dideklarasikan final, kita tulis,
---------------------------------------
public final String getName() {
return name;
}
---------------------------------------
Method static juga secara otomatis final. Ini artinya Anda tidak dapat membuatnya override.
Keterangan:
Instantiation = Proses membuat sebuah array dan menentukan berapa panjangnya dengan sebuah konstruktor setelah proses pendeklarasian selesai.
Demikian materi Object Oriented Programming Inheritance Pemrograman Java , materi pelengkap dari 3 Pilar Object Oriented Programming Java !
Baca Selengkapnya ..
Tujuan Dalam bagian ini, kita akan membicarakan bagaimana suatu class dapat mewariskan sifat dari class yang sudah ada. Class ini dinamakan subclass dan induk class dinamakan superclass.
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. Sifat ini dinamakan polimorfisme. Pada akhirnya, kita akan mendiskusikan tentang interface yang membantu mengurangi penulisan program. Pada akhir pembahasan, diharapkan pembaca dapat :
=> Mendefinisikan superclasses dan subclasses
=> Override method dari superclasses .
=> Membuat method final dan class final
Pewarisan Dalam Java
semua class, termasuk class yang membangun Java API, 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. 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.
POINT PERTAMA :
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.
---------------------------------------------------------------------------
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 kita melakukan ini yaitu, kita inginkan atribut-atribut ini untuk bisa diakses oleh subclasses dari superclassess. Jika kita mendeklarasikannya sebagai private, subclasses tidak dapat menggunakannya.
*Catatan : bahwa semua properti dari superclass yang dideklarasikan sebagai public, protected dan default dapat diakses oleh subclasses-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 properti dan method dari setiap class Person yang ada. Untuk melakukan ini, kita tulis,
------------------------------------------------------------
public class Student extends Person {
public Student() {
System.out.println(“Inside Student:Constructor”);
//beberapa kode di sini
}
// 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
POINT KEDUA:
Kata Kunci Super
Subclass juga dapat memanggil constructor secara eksplisit dari superclass terdekat. Hal ini dilakukan dengan pemanggil construktor super. Pemanggil 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. Diberikan kode berikut untuk Student,
---------------------------------------------------------------
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”;
}
-------------------------------------------------
POINT KETIGA:
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, kita tulis,
-----------------------------------------------------------------------
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
POINT KE EMPAT
Method final dan class final
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 ke dalam deklarasi method. Contohnya, jika kita ingin method getName dalam 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 ke dalam deklarasi method. Contohnya, jika kita ingin method getName dalam class Person untuk dideklarasikan final, kita tulis,
---------------------------------------
public final String getName() {
return name;
}
---------------------------------------
Method static juga secara otomatis final. Ini artinya Anda tidak dapat membuatnya override.
Keterangan:
Instantiation = Proses membuat sebuah array dan menentukan berapa panjangnya dengan sebuah konstruktor setelah proses pendeklarasian selesai.
Demikian materi Object Oriented Programming Inheritance Pemrograman Java , materi pelengkap dari 3 Pilar Object Oriented Programming Java !