Tindakan resmi
Kata kunci "final" yang disediakan oleh bahasa Java dapat digunakan untuk melakukan tugas ini. Lihatlah contoh kode sumber berikut:
Salinan kode adalah sebagai berikut:
// finalDemo.java
Kelas Akhir Publik FinalDemo {
}
Mari kita buat kelas lain di bawah ini, yang akan mewarisi kelas yang dinyatakan di atas. Kata kunci "memperluas" yang disediakan oleh bahasa Java akan memungkinkan kelas untuk diwariskan dari kelas yang ada.
Salinan kode adalah sebagai berikut:
// finalDemo2.java
Kelas Publik FinalDemo2 memperluas finalDemo {
}
Setelah menyusun kelas pertama, jika Anda kemudian mengkompilasi kelas kedua, JDK Compiler melaporkan kesalahan dan Anda akan mendapatkan pesan kesalahan berikut:
FinalDemo2.java:1: tidak dapat mewarisi dari final finalDemo
Kelas Publik FinalDemo2 memperluas finalDemo {}
^
1 kesalahan
Sekarang, Anda telah berhasil mencegah kelas pertama diwarisi oleh kelas lain melalui metode resmi.
Tindakan tidak resmi
Namun, cara untuk mencegah kelas diwarisi oleh kelas lain tidak unik. Mempertimbangkan kode berikut, saya menyatakan bahwa konstruktor bersifat pribadi, dan juga menyatakan metode statis untuk mengembalikan objek kelas.
Salinan kode adalah sebagai berikut:
Privatetest kelas publik {
private privatetest () {
System.out.println ("Private Default Constructor");
}
public static privatetest getInstance () {
mengembalikan privatetest baru ();
}
}
Kode yang dimodifikasi di atas disebut "Pola Singleton," metode getInstance selalu mengembalikan hanya satu contoh kelas ini. Tetapi mengapa kode ini mencegah kelas diwarisi? Pertimbangkan kode berikut, kelas yang dinyatakan harus mewarisi kelas di atas.
Public Class Privatetest2 memperluas privatetest {
}
Setelah menyusun kelas pertama, jika Anda kemudian mengkompilasi kelas kedua, JDK Compiler melaporkan kesalahan dan Anda akan mendapatkan pesan kesalahan berikut:
Privatetest2.java:1: privatetest () memiliki akses pribadi di privatetest
Public Class Privatetest2 memperluas privatetest {
^
1 kesalahan
Kelas kedua tidak dapat mewarisi kelas pertama. Tapi apa arti kesalahannya? Bahasa Java mensyaratkan bahwa setidaknya satu metode komponen disediakan di kelas. Jika Anda tidak memberikan metode artefak apa pun, JDK akan memasukkan metode artefak default ke dalam kelas yang Anda nyatakan. Dengan kata lain, standarnya adalah metode komponen tanpa parameter, badan komponen kosong, dan izin akses publik. Namun, jika Anda mendefinisikan metode komponen sendiri, kompiler JDK tidak akan memasukkan metode komponen default tersebut. Kami baru saja mendeklarasikan metode komponen default di kelas Privatetest, tetapi kami mengubah izin akses publik default menjadi izin pribadi, yang sejalan dengan aturan pemeriksaan sintaks kompiler JDK.
Sekarang mari kita lihat departemen kedua. Bahasa Java juga mengharuskan Anda untuk memanggil metode komponen kelas Super pada baris pertama metode komponen. Ini diperlukan untuk memulai fitur warisan. Di Java, kami menyelesaikan tugas ini dengan memanggil metode super (), yang akan dipetakan ke metode komponen superclass. Jika Anda tidak memberikan konstruktor default untuk superclass, kompiler JDK akan memasukkan metode komponen superclass default untuk dihubungi.
Kami baru saja menyatakan konstruktor sebagai izin pribadi di kelas satu. Sekarang, ketika kita mewarisi kelas ini dari kelas lain, kompiler akan mencoba memanggil metode komponen superclass default. Karena metode komponen dalam ruang lingkup superclass dinyatakan sebagai izin pribadi, kompiler akan melaporkan kesalahan yang mengatakan bahwa metode komponen superclass tidak dapat dipanggil. Oleh karena itu, kami mencegah satu kelas diwarisi oleh kelas lain melalui metode tidak resmi.
Usman Saleem
Universitas Mohammad Ali Jinnah
E-mail: [email protected]