Program Java menggunakan kelas abstrak untuk mengimplementasikan konsep abstrak di alam. Fungsi kelas abstrak adalah untuk mengorganisasikan banyak kelas terkait bersama-sama untuk menghasilkan kelas umum, yaitu kelas abstrak, dan kelas-kelas spesifik yang diorganisasikan oleh kelas tersebut akan diturunkan dari kelas tersebut sebagai subkelasnya. Kelas abstrak mencirikan perilaku publik dan meneruskannya ke kelas turunannya melalui mekanisme pewarisan. Metode yang didefinisikan dalam kelas abstrak disebut metode abstrak. Metode ini hanya memiliki deklarasi header metode, dan menggunakan titik koma untuk menggantikan definisi badan metode, yaitu hanya bentuk antarmuka metode anggota yang didefinisikan tanpa operasi khusus. . Hanya redefinisi metode anggota abstrak oleh kelas turunan yang benar-benar mengimplementasikan operasi yang terkait dengan kelas turunan.
Setelah setiap subkelas mewarisi metode abstrak dari kelas induk, ia mendefinisikan ulang dengan pernyataan dan badan metode yang berbeda, membentuk beberapa subkelas dengan nama yang sama, nilai kembalian yang sama, dan daftar parameter yang sama, dengan tujuan yang sama tetapi perbedaan spesifik tertentu implementasi. Tujuan mendefinisikan metode abstrak dalam kelas abstrak adalah untuk mengimplementasikan antarmuka, yaitu semua subkelas menyajikan metode dengan nama yang sama ke dunia luar. Kelas abstrak adalah kumpulan atribut publik dari semua subkelasnya dan kelas yang berisi satu atau lebih metode abstrak. Salah satu keuntungan menggunakan kelas abstrak adalah Anda dapat memanfaatkan sepenuhnya properti publik ini untuk meningkatkan efisiensi pengembangan dan pemeliharaan program. Pembatasan kelas abstrak dan metode abstrak adalah sebagai berikut:
(1) Setiap kelas yang dimodifikasi dengan pengubah abstrak disebut kelas abstrak. Setiap metode anggota yang dimodifikasi dengan pengubah abstrak disebut metode abstrak.
(2) Kelas abstrak dapat memiliki nol atau lebih metode abstrak, atau dapat juga berisi metode non-abstrak.
(3) Tidak diperlukan metode abstrak pada kelas abstrak, tetapi kelas dengan metode abstrak harus merupakan kelas abstrak.
(4) Untuk metode abstrak, hanya nama metode dan tipenya yang ditentukan di kelas abstrak tanpa menulis kode implementasinya.
(5) Kelas abstrak dapat memperoleh subkelas, dan semua metode abstrak yang ditentukan dalam kelas abstrak harus diimplementasikan dalam subkelas yang diturunkan dari kelas abstrak.
(6) Kelas abstrak tidak dapat membuat objek. Pekerjaan pembuatan objek dilaksanakan oleh subkelas yang berasal dari kelas abstrak.
(7) Jika terdapat metode abstrak dengan nama yang sama di kelas induk, tidak boleh ada metode abstrak lain dengan nama yang sama di subkelas.
(8) abstrak tidak dapat memodifikasi kelas yang sama secara paralel dengan final.
(9) abstrak tidak dapat digunakan untuk memodifikasi metode yang sama secara paralel dengan private, static, final atau native.
Bahasa Java menetapkan bahwa ketika suatu kelas memiliki metode abstrak, maka kelas tersebut harus dideklarasikan sebagai kelas abstrak.
Ketika suatu subkelas mewarisi kelas induk, jika terdapat metode abstrak di kelas induk, dan subkelas tersebut merasa dapat mengimplementasikan semua metode abstrak dari kelas induk, maka subkelas tersebut harus mengimplementasikan semua metode abstrak dari kelas induk, seperti sebagai:
/** * Subkelas Anjing mewarisi kelas abstrak Hewan dan mengimplementasikan metode abstrak nikmati * @author gacl * */kelas Anjing memperluas Hewan { /** * Kelas Anjing menambahkan atribut uniknya sendiri*/ public String furColor; ( String n, String c) { super(n);//Panggil konstruktor kelas induk Animal this.furColor = c; } @Override public void enjoy() { System.out.println("Anjing menggonggong.. .." ); }}
Jika subkelas merasa metode abstrak pada kelas induk tidak dapat diimplementasikan, maka deklarasikan subkelas tersebut sebagai kelas abstrak, seperti:
/** * Subkelas Cat di sini mewarisi dari kelas abstrak Animal, dan secara alami mewarisi metode abstrak enjoy() yang dideklarasikan di kelas Animal. * Namun, subkelas Cat merasa tidak tepat untuk mengimplementasikan metode enjoy() ini dengan itu sendiri, jadi Ia menyatakan dirinya sebagai kelas abstrak, * Lalu, siapa pun yang mengimplementasikan metode menikmati abstrak ini, dan siapa pun yang mewarisi subkelasnya, maka mengimplementasikan metode abstrak ini enjoy(). * @author gacl * */abstract class Cat extends Animal { /** * Cat menambahkan atribut uniknya sendiri*/ public String eyeColor; public Cat(String n, String c) { super(n);//Panggil kelas induk Metode konstruksi hewan this.eyeColor = c; }}
Subkelas Cat di sini mewarisi dari kelas abstrak Animal, dan secara alami mewarisi metode abstrak enjoy() yang dideklarasikan di kelas Animal Namun, subkelas Cat merasa tidak tepat untuk mengimplementasikan metode enjoy() ini sendiri, jadi memanggil dirinya sendiri Dinyatakan sebagai kelas abstrak, lalu siapa pun yang mengimplementasikan metode abstrak enjoy, dan siapa pun yang mewarisi subkelas, maka mengimplementasikan metode abstrak enjoy(). menyukai:
/** * Subkelas BlueCat mewarisi kelas abstrak Cat dan mengimplementasikan metode abstrak enjoy yang diwarisi dari kelas induk Cat * @author gacl * */kelas BlueCat extends Cat { public BlueCat(String n, String c) { super(n , c); } /** * Mengimplementasikan metode abstrak enjoy */ @Override public void enjoy() { System.out.println("Kucing biru mengeong...");
Kode tes lengkapnya adalah sebagai berikut:
paket javastudy.summary;/** * Kelas induk Hewan * Tambahkan abstrak di depan kelas, yaitu mendeklarasikannya seperti ini: kelas abstrak Hewan * Dengan cara ini, kelas Hewan menjadi kelas abstrak */kelas abstrak Hewan { publik String name; public Animal(String name) { this.name = name } /** * Metode abstrak * Hanya ada definisi metode, tetapi tidak ada implementasi. */ public abstract void enjoy(); }/** * Subkelas Cat di sini mewarisi dari kelas abstrak Animal, dan tentu saja mewarisi metode abstrak enjoy() yang dideklarasikan di kelas Animal, * tetapi subkelas Cat merasa demikian. diimplementasikan dengan sendirinya Metode enjoy() ini juga tidak sesuai, sehingga mendeklarasikan dirinya sebagai kelas abstrak. * Lalu, siapa pun yang mengimplementasikan metode abstrak enjoy ini, dan siapa pun yang mewarisi subkelas, maka siapa pun yang mengimplementasikan metode abstrak ini enjoy(). * @author gacl * */abstract class Cat extends Animal { /** * Cat menambahkan atribut uniknya sendiri*/ public String eyeColor; public Cat(String n, String c) { super(n);//Panggil kelas induk Metode konstruksi hewan this.eyeColor = c; }}/** * Subkelas BlueCat mewarisi kelas abstrak Cat, dan mengimplementasikan metode abstrak enjoy yang diwarisi dari kelas induk Cat * @author gacl * */kelas BlueCat diperluas Cat { public BlueCat(String n, String c) { super(n, c); /** * Mengimplementasikan metode abstrak enjoy */ @Override public void enjoy() { System.out.println("Blue Cat mengeong. .."); } }/** * Subkelas Dog mewarisi kelas abstrak Animal dan mengimplementasikan metode abstrak enjoy * @author gacl * */class Dog extends Animal { /** * Kelas Dog menambahkan atribut uniknya sendiri * / String publik furColor; public Dog(String n, String c) { super(n);//Panggil konstruktor kelas induk Animal this.furColor = c } @Override public void enjoy() { System.out.println("Dog menggonggong ...."); }} public class TestAbstract { /** * @param args */ public static void main(String[] args) { /** * Setelah kelas Cat dideklarasikan sebagai kelas abstrak, kelas Cat tidak dapat dipakai. * Karena kelas abstrak tidak lengkap dan tidak ada lengan dan kakinya, maka kelas abstrak tidak dapat dipakai. */ //Cat c = new Cat("Catname","blue");//Panggil metode enjoy BlueCat yang Anda terapkan c = new BlueCat("BlueCatname","blue"); c.enjoy();//Panggil metode enjoy yang Anda terapkan}}