Apakah antarmuka mewarisi dari Object
kelas di Jawa?
Jika tidak maka bagaimana kita dapat memanggil metode kelas objek pada contoh antarmuka
public class Test {
public static void main(String[] args) {
Employee e = null;
e.equals(null);
}
}
interface Employee {
}
java
inheritance
interface
kolam
sumber
sumber
Serializable
adalah antarmuka, yang sesederhana mungkin; menjalankannyajavap
memberi tahu Anda apa yang diwarisi darinya; dan itu ditentukan oleh Spesifikasi Bahasa Jawa. Jika Anda berpikir Spec JVM hadir di suatu tempat, silakan beri tahu kami.Jawaban:
Tidak, mereka tidak. Dan tidak ada antarmuka "root" yang umum yang secara implisit diwarisi oleh semua antarmuka (seperti dalam kasus dengan kelas). (*)
Antarmuka secara implisit menyatakan satu metode untuk setiap metode publik di
Object
. Jadiequals
metode ini secara implisit dinyatakan sebagai anggota dalam suatu antarmuka (kecuali jika sudah mewarisi dari superinterface).Ini dijelaskan secara rinci dalam Spesifikasi Bahasa Jawa, § 9.2 Anggota Antarmuka .
Posting ini telah ditulis ulang sebagai artikel di sini .
(*) Perhatikan bahwa gagasan menjadi subtipe tidak sama dengan warisan dari : Antarmuka tanpa antarmuka super memang subtipe dari
Object
( § 4.10.2. Subtipe di antara Kelas dan Jenis Antarmuka ) meskipun mereka tidak mewarisi dariObject
.sumber
Object
kelas tidak akan dideklarasikan di antarmuka?equals
metode diEmployee
antarmuka.Object
adalah supertype dari semua antarmuka [1]Namun, antarmuka tidak
implements
,extends
atau, "mewarisi dari"Object
.JLS memiliki klausa khusus untuk menambahkan
Object
metode ke antarmuka [2][1] http://java.sun.com/docs/books/jls/third_edition/html/typesValues.html#4.10.2
[2] http://java.sun.com/docs/books/jls/third_edition/html/interfaces.html#9.2
sumber
java.lang.Object
akan juga menerima referensi dari semua jenis antarmuka. Selain itu, Anda dapat menampilkan antarmuka secaraObject
implisit tanpa kesalahan kompiler.Sebenarnya ada bidang superclass di setiap
.class
file, termasuk yang mewakili antarmuka.Untuk antarmuka selalu menunjuk ke
java.lang.Object
. Tapi itu tidak digunakan untuk apa pun.Cara lain untuk melihatnya adalah:
Di sini para pemain
(Object) param
selalu valid, yang menyiratkan bahwa setiap jenis antarmuka adalah subtipe darijava.lang.Object
.sumber
Itu karena
employee e = ...
membaca bahwa ada kelas yang mengimplementasikanemployee
, dan ditugaskan ke variabele
. Setiap kelas yang mengimplementasikan antarmuka memperluas Object secara implisit, maka ketika Anda melakukannyae.equals(null)
, bahasa tahu bahwa Anda memiliki kelas yang merupakan subtipe dariemployee
.JVM akan melakukan pengecekan runtime untuk kode Anda (yaitu melempar
NullPointerException
).sumber
Apakah antarmuka mewarisi kelas Objek, bagaimana kita bisa mengakses metode kelas objek melalui referensi tipe antarmuka
Tidak antarmuka tidak mewarisi
Object
kelas, tetapi menyediakan aksesibilitas ke semua metodeObject
kelas. Anggota antarmuka adalah:mendeklarasikan metode anggota abstrak publik yang sesuai dengan setiap metode instance publik yang dinyatakan dalam
Object
kelas .Ini adalah kesalahan saat kompilasi jika antarmuka secara eksplisit menyatakan metode seperti m dalam kasus di mana m dinyatakan
final
dalamObject
.Sekarang jelas bahwa semua superinterface memiliki
abstract
metode anggota yang sesuai dengan setiappublic
metode instance yang dideklarasikan padaObject
.sumber: http://ohmjavaclasses.blogspot.com/2011/11/is-intreface-inherits-object-clashow.html
sumber
Setiap kelas yang mengimplementasikan antarmuka apa pun juga berasal dari
Object
definisi.sumber
"Semua tipe referensi mewarisi dari java.lang.Object . Kelas, enum, array, dan antarmuka adalah semua tipe referensi. "
Dikutip dari: http://docs.oracle.com/javase/tutorial/reflect/class/index.html Kalimat kedua menjadi jelas.
sumber
Classes, enums, and arrays (which all inherit from java.lang.Object) as well as interfaces are all reference types
: ia tidak mengatakan antarmuka mewarisi dari Object. Hanya Kelas, enum, dan array.