Java : Mega-Super-Class Bernama Object


Java adalah pemrograman berorientasi objek, dan kita semua tahu itu (setidaknya apabila Anda seorang programmer Java). Dengan Java kita bisa dengan mudah membuat suatu Class, kemudian meng-instantiate Class tersebut, mewariskan(inheritance), merubah suatu metode yang ada pada Class itu (overriding, overload), merubah Class itu menjadi bentuk yang lebih spesifik (polymorphism), dan membuat Class tersebut mengimplementasikan suatu metode dari suatu interface(implements).

Namun apakah Anda sadar, kalau semua Class yang Anda buat adalah pewarisan dari suatu mega-super-class?

Saya beri contoh.

  • Ini adalah sebuah Class Animal:
    class Animal {}
  • Dan ini adalah sebuah Class Dog, yang mewarisi segala hal yang ada pada Class Animal
    class Dog extends Animal { }
  • Dan ini sebuah Class Cat, yang juga mewarisi Animal
    class Cat extends Animal { }

Dengan menggunakan aturan IS-A kita bisa berkata kalau Dog IS-A Animal, begitu pula Cat IS-A Animal. Lantas, apakah Animal itu?

Untuk menjawab pertanyaan di atas, kita perlu berpikir tentang sesuatu yang lebih generik, lebih umum, yang lebih abstrak dari Animal, dan parahnya kita tidak mempunyai superclass dari Animal

Lalu kita kembali ke definisi dari Java, sebuah bahasa pemrograman yang mempunyai paradigma berorientasi-objek.

Dan, bagaimana jika kita sampai pada kesimpulan bahwa Animal IS-A Object? Kedengarannya cukup masuk akal. B)

Semua Class pada Java merupakan pewarisan(extends) dari Object.

Class Object adalah ibu dari semua Class; superclass dari semua class yang ada di Java. Bayangkan, ketika Anda menggunakan polymorphism, seperti mengubah Animal menjadi Dog, Anda tetap harus membuat Class Dog dengan metode yang bisa menampung atau mengembalikan tipe dari Class Dog. Tanpa sebuah superclass yang umum, untuk semua Class yang ada di Java, mustahil bagi pengembang Java untuk membuat sebuah metode yang bisa menerima atau mengembalikan jenis tipe yang Anda buat, contohnya pada ArrayList, developer Java tidak pernah tahu, objek tipe macam apa saja yang akan masuk ke sana..

Jadi, Anda selalu mebuat subclass dari Class Object sejak awal, dan Anda bahkan tidak mengetahui hal itu. Semua Class yang Anda buat merupakan pewarisan dari Object. Walau Anda tidak pernah menulis kodenya, namun Anda bisa membayangkan Class yang Anda buat kode-nya adalah seperti ini :
class Animal extends Object{}

Tapi bagaimana dengan Class Dog dan Class Cat, mereka sudah mewarisi sebuah Class, yaitu Class Animal. Well, itu tidak masalah, karena pada akhirnya Dog extends Animal extends Object. Dan kita bisa mengambil kesimpulan bahwa:

Semua Class yang tidak mewarisi Class manapun, secara implisit mewarisi Class Object.

Jadi apa saja yang ada di Class Object? Saya secara khusus telah membuatkan Anda source code yang akan memberikan bayangan tentang inheritance, polymorphism dan sekaligus mengenal Class Object.

Ini adalah source code dari class Animal

public class Animal
{
    String name;

    public void setName(String n)
    {
    name = n;
    }

    public String getName()
    {
    return name;
    }

    public void suara()
    {
    System.out.println("Suara binatang asli...");
    }
}

Source code dari class Dog

class Dog extends Animal
{
    public void suara()
    {
    System.out.println("Guk.. guk");
    }
}

Dan ini the main program

import java.util.*;

public class TestObject
{
    public static void main(String[] args)
    {
    Animal cat = new Animal(); //New object
    Animal dog = new Dog(); //polymorphism dari inherited object
    
    cat.setName("Maneki Neko");
    dog.setName("Doggy sty");
    System.out.println("Nama anjing saya adalah "+ dog.getName());
    System.out.println("Nama kucing saya adalah "+ cat.getName());

    System.out.println("Dengarkan suara mereka");
    cat.suara();
    dog.suara();

    //Beberapa method yang ada di superClass Object
    
    //Mengecek apakah kedua objek sama atau tidak
    System.out.println("\nMengecek dog dan cat apakah sama?\n");
    if(cat.equals(dog))
       {
           System.out.println("Ya");
       }
       else
           {
           System.out.println("Nggak");
           }
     
    
    //Mengembalikan class asal suatu object
    System.out.println("\nClass cat asalnya dari "+cat.getClass());
    System.out.println("Class dog asalnya dari "+dog.getClass());
    
    //Mencetak Java Hascode
    System.out.println("\nHashcode class cat "+cat.hashCode());
    System.out.println("Hashcode class dog "+dog.hashCode());

    //Mencetak String dengan nama Class dan LOL-ed numbers
    System.out.println("\nString dari cat "+cat.toString());
    System.out.println("String dari dog "+dog.toString());

    //Object di dalam ArrayList
    ArrayList<Object> daftarAnjing = new ArrayList<Object>();
    /*Karena semua kelas termasuk Dog extends objek
      maka kita bisa memasukkan Dog ke dalam daftarAnjing
     */
    daftarAnjing.add(dog);
    /*Namun, untuk mengeluarkannya, kita harus meng-casting kembali
      ke bentuk "Dog"
    */
    Dog dogYangSama = (Dog) daftarAnjing.get(0);
    //Jika kita tidak yakin apakah itu benar2 Dog class, gunakan

    Object njing = daftarAnjing.get(0);
    if(njing instanceof Dog)
        {
        Dog sameDog = (Dog) njing;
        System.out.println("\nAnjing yang sama!.");
            }
    }
}

Hasil output program diatas :

Output dari Program

Well, dari source code di atas, kita bisa mengetahui bahwa ada beberapa metode yang terdapat pada Class Object, diantaranya adalah :

  • equals(Object o)
    Berguna untuk membandingkan apakah suatu Object adalah sama dengan Object lainnya.
  • getClass()
    Memberikan informasi tentang superclass atau class asal dari suatu Objec
  • hashcCode()
    Mencetak kode hash dari suatu Object.
  • toString()
    Mencetak pesan dalam bentuk String dengan nama dari Class itu dan beberapa angka yang… tidak usah dipedulikan.

Sebenarnya masih ada method lain, seperti clone, wait, dan finalize. Silahkan Anda telusuri sendiri sesuai kreativitas Anda. Dan kegunaan dari mengetahui Class Object, adalah seperti yang saya contohkan pada implementasi ArrayList di atas. Dimana Dog adalah Object, tapi tidak semua Object adalah Dog. Kita harus meng-casting sebuah Object ke tipe tertentu terlebih dahulu, apabila ingin menggunakannya pada metode yang menerima tipe dari Object tertentu. Namun apabila digunakan pada metode yang menerima masukan tipe Object, berarti dia bisa menerima masukan dari Class apapun.

Namun perlu diingat, apabila Anda memasukkan tipe class tertentu, ke dalam suatu metode yang menerima tipe Class Object, maka semua class akan di-casting menjadi Class Object. Tapi tidak usah khawatir, karena class tersebut masih bisa di-cast kembali ke tipe class asal.

Anda beruntung telah berkunjung ke blog saya, dan mengetahui semua ini. Enjoy!

7 thoughts on “Java : Mega-Super-Class Bernama Object

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s