Saya sedang memikirkan hal itu, dan saya memiliki beberapa keraguan.
Ketika saya mendeklarasikan antarmuka, misalnya:
public interface MyInterface
{
public void method1();
public void method2();
}
Bisakah metode antarmuka ini dianggap abstrak? Yang saya maksud adalah bahwa konsep metode abstrak adalah:
Metode abstrak adalah metode yang dideklarasikan, tetapi tidak mengandung implementasi.
Jadi, dapatkah metode ini dianggap abstrak? Mereka bukan metode abstrak "murni" karena saya tidak menggunakan abstract
kata itu, tetapi secara konseptual, sepertinya mereka.
Apa yang bisa Anda ceritakan tentang hal itu?
Terima kasih.
Jawaban:
Antarmuka seperti kelas abstrak "murni". Kelas dan semua metodenya abstrak. Kelas abstrak dapat menerapkan metode tetapi kelas itu sendiri tidak dapat dipakai (berguna untuk warisan dan mengikuti KERING).
Untuk antarmuka, karena tidak ada implementasi sama sekali, mereka berguna untuk tujuan mereka: kontrak. Jika Anda mengimplementasikan Antarmuka maka Anda harus menerapkan metode dalam antarmuka.
Jadi perbedaannya adalah kelas abstrak dapat menerapkan metode sedangkan antarmuka tidak bisa.
Alasan mereka terpisah adalah agar sebuah kelas dapat mengimplementasikan beberapa antarmuka. Java dan C # membatasi kelas untuk melekat dari kelas induk tunggal. Beberapa bahasa memungkinkan Anda mewarisi dari beberapa kelas dan Anda bisa menyelesaikan pekerjaan antarmuka melalui kelas abstrak "murni". Tetapi multiple inheritance memiliki masalah, yaitu Diamond Problem yang ditakuti
sumber
Saya menemukan jawaban yang bermanfaat di sini: http://download.oracle.com/javase/tutorial/java/IandI/abstract.html
sumber
Kelas abstrak dapat memiliki metode abstrak.
Antarmuka hanya dapat memiliki metode abstrak.
method1()
danmethod2()
dalam contoh Anda adalah metode abstrak.sumber
Perbedaannya di sini adalah bahwa kelas abstrak dapat berisi detail implementasi, meskipun tidak dapat dibuat sendiri. Sedangkan antarmuka hanyalah template untuk kelas
sumber
Jadi dalam sebuah subkelas, metode abstrak yang diwarisi dapat kembali menjadi abstrak tanpa implementasi, sedangkan jika sebuah kelas mengimplementasikan antarmuka, metode itu harus diimplementasikan.
sumber
Kelas antarmuka tidak memiliki metode abstrak. Mereka tidak memiliki metode sama sekali. Mereka hanya memiliki daftar metode yang harus diterapkan oleh kelas lain untuk dapat menyesuaikan dengan antarmuka. Dalam contoh Anda, tidak ada metode metode1 dan tidak ada metode metode2 sampai seseorang menambahkan metode ini ke kelas.
sumber