Pertanyaan Kapan menggunakan kelas abstrak?


Ini artikel MSDN tentang kelas abstrak, tapi aku benar-benar tidak mengerti ...

Kapan saya harus benar-benar menggunakan kelas abstrak? Apa keuntungan menggunakan kelas abstrak?


75
2018-04-03 09:43


asal


Jawaban:


Kelas abstrak berguna ketika Anda membutuhkan kelas untuk tujuan pewarisan dan polimorfisme, tetapi tidak masuk akal untuk instantiate kelas itu sendiri, hanya subclassnya. Mereka biasanya digunakan ketika Anda ingin menentukan template untuk sekelompok subclass yang berbagi beberapa kode implementasi umum, tetapi Anda juga ingin menjamin bahwa objek superclass tidak dapat dibuat.

Misalnya, katakanlah Anda perlu membuat objek Anjing, Kucing, Hamster, dan Ikan. Mereka memiliki sifat yang mirip seperti warna, ukuran, dan jumlah kaki serta perilaku sehingga Anda membuat superclass Hewan. Namun, warna apa itu Hewan? Berapa banyak kaki yang dimiliki objek Hewan? Dalam hal ini, tidak masuk akal untuk instantiate objek bertipe Hewan tetapi hanya subkelasnya.

Kelas abstrak juga memiliki manfaat tambahan dalam polimorfisme - memungkinkan Anda untuk menggunakan tipe superclass (abstrak) sebagai argumen metode atau tipe kembalinya. Jika misalnya Anda memiliki kelas PetOwner dengan metode kereta () Anda dapat mendefinisikannya sebagai mengambil objek bertipe Hewan misalnya. kereta (Animal a) dibandingkan dengan menciptakan metode untuk setiap subtipe Hewan.


127
2018-04-03 10:31



Dengan menggunakan kelas abstrak kami dapat membuat kelas lebih generik.

Sebagai contoh: jika kelas A adalah kelas abstrak dan ada kelas B, kelas C dan kelas D memperluas kelas abstrak A maka sub-kelas ini akan mewarisi metode yang sudah dinyatakan dalam kelas abstrak A sehingga membuat metode tersebut lebih umum.


5
2017-07-26 21:38



Anda menggunakannya untuk kelas yang tidak akan pernah dibuat (sangat efektif tidak ada), tetapi Anda ingin mewarisi dari mereka untuk alasan polimorfisme.


4
2018-04-03 10:46



Gunakan kelas abstrak ketika Anda mendefinisikan perilaku untuk kelas di kelas hirarki Anda yang tidak akan pernah digunakan untuk instantiate objek secara langsung.

Jadi, pikirkan dirimu sebagai Tuhan untuk sesaat. Kelas CBabyBoy dan CBanyGirl Anda tidak akan abstrak - karena ini adalah benda padat yang bisa dibuat. Di sisi lain, kelas CPerson dan CAnimal Anda AKAN abstrak - mereka berguna dari sudut pandang hierarki tipe, tetapi Anda tidak akan pernah berjalan CAnimal dingbat = new Animal();


3
2018-04-03 09:57



Richard telah memberikan contoh adalah kelas abstact memiliki keunggulan dibandingkan kelas non-abstrak.

Saya ingin menambahkan tabel fakta untuk memilih antara kelas abstrak dan antarmuka. Gambar dapat ditemukan sini.

enter image description here


3
2018-02-23 22:09



Pada dasarnya, Anda harus menggunakan kelas abstrak, ketika beberapa entitas dalam hierarki Anda secara logis akan memiliki metode (s) itu tidak tahu bagaimana menerapkan, tetapi keturunannya lakukan. Ada miliaran contoh 'kehidupan nyata' di seluruh web, benar-benar)


2
2018-04-03 09:49