Apa perbedaan antara overloading metode dan menimpanya di Jawa?

10

Apa perbedaan antara overloading metode dan menimpanya di Jawa?

Apakah ada perbedaan dalam tanda tangan metode, penentu akses, tipe pengembalian, dll.?

pengguna63948
sumber
3
Dalam PHP kelebihan memiliki arti yang sama sekali berbeda .
lortabac

Jawaban:

41

Untuk membebani metode dengan metode baru, metode baru harus memiliki tanda tangan yang berbeda. Yaitu dua metode kelebihan beban memiliki nama yang sama, tetapi parameter yang berbeda. Berikut adalah contoh dari dua metode kelebihan beban:

boolean isOdd(int number) { ... };
boolean isOdd(float number) { ... };

Berdasarkan pada jenis parameter, metode yang sesuai akan dipanggil. Perhatikan bahwa mengubah jenis pengembalian tidak cukup (meskipun Anda juga dapat melakukan ini).

Ketika metode diganti, maka metode baru memiliki tanda tangan yang sama dan menggantikan metode yang diganti dalam beberapa kasus. Berikut adalah contoh metode yang diganti:

public class A 
{
     public void someMethod() { ... }
}

public class B extends A
{
     public void someMethod() { ... }
}

Pilihan dibuat berdasarkan jenis objek. Sebagai contoh,

A someA = new B();
someA.someMethod();

akan memanggil someMethoddari B. Anda dapat (dan harus) menambahkan anotasi @Override:

public class B extends A
{
     @Override
     public void someMethod() { ... }
}

Sekarang, jika Anda secara tidak sengaja mengubah parameter dalam B, kompiler akan memberi tahu Anda, bahwa Anda tidak mengesampingkan beberapa Metode () tetapi membebani secara berlebihan.

superM
sumber
@ scarfridge, terima kasih untuk hasil editnya. Belum pemrograman dengan Java selama berabad-abad dan banyak lupa)))
superM
1
Terima kasih telah menyebutkan anotasi @Override dan fakta bahwa hanya memiliki tipe pengembalian yang berbeda tidak menyebabkan metode untuk menimpanya, tetapi malah menjadi berlebihan.
Daniel Dinnyes
13

Overloading, metode memiliki nama yang sama tetapi parameter yang berbeda.

Overriding, implementasi yang diberikan di kelas dasar diganti dengan yang ada di sub kelas.

NimChimpsky
sumber
1
tolong jangan mengedit / memperluas ini. Singkatnya adalah titik.
NimChimpsky
7

Konsep yang Anda tanyakan tercakup dalam tutorial Java.

Penjelasan untuk penggantian diberikan sebagai berikut:

Metode instance dalam subclass dengan tanda tangan yang sama (nama, ditambah nomor dan jenis parameternya) dan tipe kembali sebagai metode instance dalam superclass menimpa metode superclass.

Kemampuan subclass untuk menimpa metode memungkinkan kelas untuk mewarisi dari superclass yang perilakunya "cukup dekat" dan kemudian memodifikasi perilaku yang diperlukan. Metode pengesampingan memiliki nama, jumlah dan tipe parameter yang sama, dan tipe pengembalian seperti metode yang dikesampingkan. Metode overriding juga dapat mengembalikan subtipe dari tipe yang dikembalikan oleh metode overridden. Ini disebut tipe pengembalian kovarian .

Saat @Overridemengganti metode, Anda mungkin ingin menggunakan anotasi yang menginstruksikan kompiler yang Anda ingin menimpa metode dalam superclass. Jika, karena alasan tertentu, kompiler mendeteksi bahwa metode ini tidak ada di salah satu kacamata super, itu akan menghasilkan kesalahan. Untuk informasi lebih lanjut tentang @Override, lihat Anotasi ...

Kelebihan dijelaskan dalam tutorial sebagai berikut:

Bahasa pemrograman Java mendukung metode overloading, dan Java dapat membedakan antara metode dengan tanda tangan metode yang berbeda. Ini berarti bahwa metode dalam kelas dapat memiliki nama yang sama jika mereka memiliki daftar parameter yang berbeda (ada beberapa kualifikasi untuk ini yang akan dibahas dalam pelajaran berjudul "Antarmuka dan Warisan".

Misalkan Anda memiliki kelas yang dapat menggunakan kaligrafi untuk menggambar berbagai jenis data (string, integer, dan sebagainya) dan yang berisi metode untuk menggambar setiap tipe data. Hal ini rumit untuk menggunakan nama baru untuk setiap metode-misalnya, drawString, drawInteger, drawFloat, dan sebagainya. Dalam bahasa pemrograman Java, Anda bisa menggunakan nama yang sama untuk semua metode menggambar tetapi memberikan daftar argumen yang berbeda untuk setiap metode. Dengan demikian, kelas menggambar data dapat mendeklarasikan empat metode bernama draw, masing-masing memiliki daftar parameter yang berbeda ...

Metode kelebihan dibedakan oleh jumlah dan jenis argumen yang dilewatkan ke dalam metode ...

Anda tidak dapat mendeklarasikan lebih dari satu metode dengan nama yang sama dan jumlah dan tipe argumen yang sama, karena kompilator tidak dapat membedakannya.

Kompiler tidak mempertimbangkan tipe pengembalian saat membedakan metode, jadi Anda tidak bisa mendeklarasikan dua metode dengan tanda tangan yang sama bahkan jika mereka memiliki jenis pengembalian yang berbeda.


Catatan: Metode kelebihan beban harus digunakan dengan hemat, karena dapat membuat kode jauh lebih mudah dibaca.


Penjelasan di atas untuk kelebihan beban menyebutkan kualifikasi yang dibahas dalam pelajaran berjudul "Interfaces and Inheritance" :

Dalam subkelas, Anda bisa membebani metode yang diwarisi dari superclass. Metode kelebihan seperti itu tidak menyembunyikan atau menimpa metode superclass - mereka adalah metode baru, unik untuk subclass.

agas
sumber
2

Kelebihan metode biasanya didefinisikan sebagai "menyediakan beberapa metode yang tersedia dengan nama yang sama, berbeda dengan jumlah dan jenis input dan output". Konsepnya biasanya bahwa Anda ingin dapat melakukan operasi dasar yang sama dengan berbagai set input: Anda dapat, misalnya, "menambahkan" dua nilai tipe numerik, namun biasanya penting untuk mengetahui jenis persisnya nilainya agar Anda dapat memanfaatkan atau merencanakan perilaku spesifik dari jenis itu. Dengan demikian, Anda akan menentukan metode untuk setiap kombinasi tipe numerik (dan atau koleksi) yang ingin Anda dukung. Semua metode ini memiliki nama yang sama, tetapi "tanda tangan" berbeda; pada waktu kompilasi,

Mengganti metode biasanya didefinisikan sebagai "menyediakan implementasi yang berbeda di kelas turunan dari metode dengan tanda tangan tertentu yang didefinisikan di kelas dasar". Ada banyak alasan untuk mengganti metode; hampir semuanya memiliki kesamaan bahwa kelas turunan memiliki pengetahuan tambahan tentang apa yang harus dilakukan, yang tidak dapat diketahui oleh kelas dasar. Ada dua rasa override dalam sebagian besar bahasa OO; overriding dapat menggantikan metode kelas dasar, atau dapat diperluasmetode kelas dasar. Perbedaannya adalah biasanya bahwa kelas turunan yang memperluas implementasi kelas dasar akan memanggil versi override dari kelas dasar dari metode di beberapa titik selama pelaksanaan metode overriding. Hal ini memungkinkan kelas utama untuk "menggunakan kembali" area umum dari operasi yang terkandung dalam kelas dasar.

KeithS
sumber