Contoh analisis definisi abstrak Java
1. Gambaran Keseluruhan
Dalam konsep OOP, semua objek diterangkan melalui kelas tetapi tidak semua kelas digunakan untuk menerangkan objek. Jika kelas tidak mengandungi maklumat yang mencukupi untuk menerangkan objek konkrit, kelas sedemikian dipanggil kelas abstrak.
Kelas abstrak: (1) Kelas abstrak tidak boleh membuat seketika objek. Hanya subkelas bukan abstrak bagi kelas abstrak boleh mencipta objek (2) yang boleh merangkumi: pembolehubah ahli, kaedah ahli, pembina, dsb. (3) Pembina dan kaedah kelas (kaedah diubah suai dengan statik) tidak boleh diisytiharkan sebagai kaedah abstrak
Kaedah abstrak: (1) Jika kelas mengandungi kaedah abstrak, maka kelas mestilah kelas abstrak (2) Mana-mana Subkelas mesti mengatasi kaedah abstrak kelas induk, atau mengisytiharkan diri mereka sebagai kelas abstrak
Definisi: nama kelas kelas abstrak
2. Contoh: Petani memberi makan haiwan
Haiwan : Kelas abstrak--------getName(), move(), drink()
Reptilia, Mamalia: Mewarisi kelas abstrak
Ular, harimau, kambing, arnab: mewarisi masing-masing Reptilia atau Mamalia
fammer: bringWater(), feedWater(Animal animal)---- Bertanggungjawab membawa air ke tempat yang ditetapkan, dan kemudian haiwan itu bergerak ke destinasi dan minum air
Kodnya adalah seperti berikut:
package abstractDemo; /** * @author lpx * @Description TODO * @date 2021-04-07 */ public abstract class Animal { abstract String getName(); abstract void move(String destination); abstract void drink(); } abstract class Reptile extends Animal{ } abstract class Mammal extends Animal{ } class Tiger extends Mammal{ private static String name="tiger"; @Override String getName() { return this.name; } @Override void move(String destination) { System.out.println("tiger move to "+destination+"."); } @Override void drink() { System.out.println("tiger lower it is head and drink"); } } class Goat extends Mammal{ private static String name="goat"; @Override String getName() { return this.name; } @Override void move(String destination) { System.out.println("goat move to "+destination+"."); } @Override void drink() { System.out.println("goat lower it head to drink"); } } class Rabbit extends Mammal{ private static String name="rabbit"; @Override String getName() { return this.name; } @Override void move(String destination) { System.out.println("rabbit move to "+destination+"."); } @Override void drink() { System.out.println("rabbit put out it is tongue and drink"); } } class Snake extends Reptile{ private static String name="snake"; @Override String getName() { return this.name; } @Override void move(String destination) { System.out.println("snake move to "+destination+"."); } @Override void drink() { System.out.println("snake dived into and drink"); } } class Farmer{ public void bringWater(String destination){ System.out.println("Farmer bring water to " + destination + "."); } public void feedWater(Animal a){ // polymorphism this.bringWater("Feeding Room"); a.move("Feeding Room"); a.drink(); } } class Test{ public static void main(String[] args) { Farmer fm=new Farmer(); Snake snake=new Snake(); Goat goat=new Goat(); Tiger tiger=new Tiger(); Rabbit rabbit=new Rabbit(); fm.feedWater(snake); fm.feedWater(goat); fm.feedWater(tiger); fm.feedWater(rabbit); } }
Hasil pelaksanaan:
Ringkasan:
Jika setiap haiwan tidak diabstraksikan Untuk kaedah minuman dan bergerak, polimorfisme tidak boleh dicapai. Kelas petani perlu membebankan berbilang feedWaters mengikut parameter yang berbeza. Jika anda terus menambah haiwan, bilangan tambah nilai akan meningkat. Untuk memudahkan perbandingan dan pemahaman, saya juga menulisnya mengikut pemikiran konvensional Kodnya adalah seperti berikut:
package abstractDemo; /** * @author lpx * @Description TODO * @date 2021-04-07 */ class Tiger1{ private static String name="tiger"; String getName() { return this.name; } void move(String destination) { System.out.println("tiger move to "+destination+"."); } void drink() { System.out.println("tiger lower it is head and drink"); } } class Goat1{ private static String name="goat"; String getName() { return this.name; } void move(String destination) { System.out.println("goat move to "+destination+"."); } void drink() { System.out.println("goat lower it head to drink"); } } class Rabbit1{ private static String name="rabbit"; String getName() { return this.name; } void move(String destination) { System.out.println("rabbit move to "+destination+"."); } void drink() { System.out.println("rabbit put out it is tongue and drink"); } } class Farmer1{ public void bringWater(String destination){ System.out.println("Farmer bring water to " + destination + "."); } public void feedWater(Goat1 goat){ // polymorphism this.bringWater("Feeding Room"); goat.move("Feeding Room"); goat.drink(); } public void feedWater(Tiger1 tiger){ // polymorphism this.bringWater("Feeding Room"); tiger.move("Feeding Room"); tiger.drink(); } public void feedWater(Rabbit1 rabbit1) { this.bringWater("Feeding Room"); rabbit1.move("Feeding Room"); rabbit1.drink(); } } public class Test1{ public static void main(String[] args) { Farmer1 farmer1=new Farmer1(); Tiger1 tiger1=new Tiger1(); Goat1 goat1=new Goat1(); Rabbit1 rabbit1=new Rabbit1(); farmer1.feedWater(tiger1); farmer1.feedWater(goat1); farmer1.feedWater(rabbit1); } }
Saya menaip contoh ini dengan tangan dan mendapati bahawa asasnya saya tidak belajar berhati-hati pada masa lalu, yang membawa kepada kekeliruan di banyak tempat Mengapa menulis itu.
(1) Berbilang kelas boleh ditakrifkan dalam fail .java, tetapi hanya satu boleh ditakrifkan sebagai awam dan nama kelas mestilah sama dengan nama fail
(2) Pewarisan kelas abstrak Untuk kelas abstrak, tidak perlu mengatasi kaedah abstraknya (sebabnya juga sangat mudah, ia abstrak dan tidak boleh melaksanakan badan kaedah). Walaupun kelas bukan abstrak mewarisi kelas abstrak mesti mengatasi kaedah abstrak, dan kaedah bukan abstrak tidak diperlukan.
(3) Perbezaan antara menulis semula dan terlebih muatan (soalan temu duga frekuensi tinggi?)
Lebih muatan: tentukan nama kaedah yang sama tetapi parameter berbeza. Ia tergolong dalam polimorfisme masa kompilasi
penulisan semula: subkelas mengatasi kaedah @Override kelas induk. Kepunyaan polimorfisme masa jalan
Atas ialah kandungan terperinci Contoh analisis definisi abstrak Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Panduan Nombor Sempurna di Jawa. Di sini kita membincangkan Definisi, Bagaimana untuk menyemak nombor Perfect dalam Java?, contoh dengan pelaksanaan kod.

Panduan untuk Penjana Nombor Rawak di Jawa. Di sini kita membincangkan Fungsi dalam Java dengan contoh dan dua Penjana berbeza dengan contoh lain.

Panduan untuk Weka di Jawa. Di sini kita membincangkan Pengenalan, cara menggunakan weka java, jenis platform, dan kelebihan dengan contoh.

Panduan untuk Nombor Smith di Jawa. Di sini kita membincangkan Definisi, Bagaimana untuk menyemak nombor smith di Jawa? contoh dengan pelaksanaan kod.

Dalam artikel ini, kami telah menyimpan Soalan Temuduga Spring Java yang paling banyak ditanya dengan jawapan terperinci mereka. Supaya anda boleh memecahkan temuduga.

Java 8 memperkenalkan API Stream, menyediakan cara yang kuat dan ekspresif untuk memproses koleksi data. Walau bagaimanapun, soalan biasa apabila menggunakan aliran adalah: bagaimana untuk memecahkan atau kembali dari operasi foreach? Gelung tradisional membolehkan gangguan awal atau pulangan, tetapi kaedah Foreach Stream tidak menyokong secara langsung kaedah ini. Artikel ini akan menerangkan sebab -sebab dan meneroka kaedah alternatif untuk melaksanakan penamatan pramatang dalam sistem pemprosesan aliran. Bacaan Lanjut: Penambahbaikan API Java Stream Memahami aliran aliran Kaedah Foreach adalah operasi terminal yang melakukan satu operasi pada setiap elemen dalam aliran. Niat reka bentuknya adalah

Panduan untuk TimeStamp to Date di Java. Di sini kita juga membincangkan pengenalan dan cara menukar cap waktu kepada tarikh dalam java bersama-sama dengan contoh.

Java ialah bahasa pengaturcaraan popular yang boleh dipelajari oleh pembangun pemula dan berpengalaman. Tutorial ini bermula dengan konsep asas dan diteruskan melalui topik lanjutan. Selepas memasang Kit Pembangunan Java, anda boleh berlatih pengaturcaraan dengan mencipta program "Hello, World!" Selepas anda memahami kod, gunakan gesaan arahan untuk menyusun dan menjalankan program, dan "Hello, World!" Pembelajaran Java memulakan perjalanan pengaturcaraan anda, dan apabila penguasaan anda semakin mendalam, anda boleh mencipta aplikasi yang lebih kompleks.
