Override di dalam Java - Genius Corner siri 19

Tajuk: Override di dalam Java
Genius Corner Siri 19
Oleh: Fariz Gaskin

Salam ceria buat semua pembaca budiman. Kita bertemu kembali di dalam ruangan Genius Corner minggu ini, bersama latihan Java bahagian yang kelima. Kali ini, kita akan pelajari konsep Override.

Di dalam latihan terdahulu, kita telah belajar konsep superclass (kelas utama), subclass (sub-kelas) dan inheritance (pewarisan). Sekiranya sesebuah kelas itu mewarisi method dari kelas utama, maka kelas itu dibenarkan mencapai method dari kelas utama melalui konsep override.

Menurut kamus, override membawa maksud penolakan atau penafian. Tetapi di dalam Object Oriented Programming seperti Java, ia mempunyai maksud yang berbeza.

Contohnya, kelas Kereta merupakan sub-kelas kepada Kenderaan yang mempunyai method belokKiri(). Melalui konsep override, kelas Kereta dibenarkan mengatasi pangkatnya sebagai sub-kelas, dan memanggil method belokKiri() yang berada di dalam kelas di atasnya. Dalam bahasa mudah, “lawan taukey”.

Namun, penggunaan override mempunyai beberapa syarat. Antaranya, kelas dan sub-kelas mestilah memiliki tahap akses public. Jika kelas mempunyai tahap public tetapi sub-kelas mempunyai tahap private atau protected, maka override tidak boleh dilakukan. Situasi sebaliknya juga tidak membolehkan override; kelas protected dan sub-kelas public.

Selain itu, jika sesebuah method di dalam kelas tidak boleh diwarisi, maka ia tidak mempunyai kebenaran override. Override juga hanya boleh dilakukan terhadap method yang tidak ditandakan sebagai final.

Override tidak boleh dilakukan terhadap constructor seperti contoh main() atau onCreate(). Maka adalah lebih baik memindahkan fungsi dan method yang akan diulang ke dalam kelas atau sub-kelas lain.

Tanpa membuang masa, mari kita mulakan latihan kali ini.

Latihan

Langkah 1: Layari laman web https://www.compilejava.net dan tuliskan kod aturcara berikut di dalam ruangan editor.

class Animal {
public void move() {
System.out.println("Animals can move");
}
}
class Dog extends Animal {
public void move() {
super.move(); // invokes the super class method
System.out.println("Dogs can walk and run");
}
}
public class TestDog {
public static void main(String args[]) {
Animal b = new Dog(); // Animal reference but Dog object
b.move(); // runs the method in Dog class
}
}

Langkah 2: Klik butang COMPILE & EXECUTE untuk melihat hasilnya.

Semakan

Di dalam kod aturcara tadi, kita telah menghasilkan sebuah class bernama Animal dan sebuah class bernama Dog yang mewarisi Animal tanpa menjadi sub-kelasnya. Kedua-dua kelas tadi mempunyai method dengan nama yang sama, iaitu move().

Kita juga telah menghasilkan kelas ketiga, iaitu TestDog. Di dalam kelas ini, kita telah menghasilkan objek b merujuk kepada Animal, tetapi didaftarkan sebagai objek Dog. Seterusnya, arahan move() dihantar oleh b kepada Dog.

Jika dilihat dengan teliti, kelas Dog memanggil method move() dari kelas Animal dari dalam method move() miliknya. Kata ganti nama super digunakan oleh waris kelas Animal tadi untuk memanggil pewarisnya.

Oleh itu, method move() milik Dog akan memulangkan string dari method move() Animal iaitu “Animals can move” dan juga string miliknya sendiri iaitu “Dogs can walk and run”.

Pelajar antarabangsa IUKL sedang menyiapkan projek JavaScript

Soalan

Sebelum ruangan minggu ini ditamatkan, anda perlu menyelesaikan beberapa soalan latihan. Sila ubahsuai kod aturcara tadi supaya:

  • Hasilkan objek baru di dalam TestDog yang menjalankan operasi sama seperti b
  • Ubah nama move() di dalam Animal supaya berbeza dengan Dog() dan cuba run
  • Ubahsuai kod supaya Animal dan Dog memulangkan integer yang boleh dicampur

Jika anda mempunyai sebarang pertanyaan atau cadangan, sila emelkan kepada farizgaskin@gmail.com dan kami akan cuba jawab sepantas mungkin. Sehingga bertemu lagi dalam ruangan yang sama minggu hadapan, selamat mencuba!

Leave a Reply

Your email address will not be published. Required fields are marked *