Metode overriding digunakan dalam pemrograman berorientasi objek dalam hierarki pewarisan, dan itu terjadi ketika metode yang didefinisikan dalam superclass didefinisikan ulang dalam subclass. Biasanya, metode subkelas melakukan sesuatu yang berbeda dari metode superkelas atau memperluas kemampuan superkelas, tetapi ini tidak harus terjadi. Penggantian metode terjadi setiap kali metode superclass didefinisikan ulang dalam subkelas, terlepas dari konten metode yang didefinisikan ulang. Tanda tangan metode yang didefinisikan ulang harus sama persis.
Misalnya, kelas A mungkin berisi metode yang disebut “doSomething,” dan metode ini tidak mengambil parameter input. Selain itu, kelas B dan C mungkin merupakan subkelas dari kelas A. Kelas B mungkin berisi metode yang disebut “doSomething,” yang tidak mengambil parameter input, dan kelas C mungkin berisi metode “doSomething” yang mengambil angka sebagai parameter input. Dalam contoh ini, hanya kelas B yang akan mendemonstrasikan penggantian metode, karena metode “doSomething”-nya memiliki tanda tangan metode yang sama dengan superclass-nya, kelas A. Metode “doSomething” di kelas C, sebaliknya, mendemonstrasikan metode overloading karena menciptakan metode yang sama sekali baru.
Warisan virtual dalam C++ adalah contoh lain dari metode override. Metode virtual di superclass mungkin atau mungkin tidak diimplementasikan, tetapi definisi subclass apa pun darinya adalah turunan dari metode overriding. Ketika sebuah metode diganti dalam subkelas, metode superkelas tidak dipanggil kecuali jika dipanggil secara eksplisit. Cara khusus untuk memanggil metode yang diganti ini sering dikatakan “menyembunyikan” implementasi superclass.
Meskipun penggantian metode sangat fleksibel, tidak semua metode dapat diganti, dan ada kalanya kekakuan ini lebih disukai. Di Java dan C++, kata kunci tertentu dapat diterapkan dalam tanda tangan metode untuk mencegah metode ditimpa dalam subkelas. Untuk melakukan ini, Java menggunakan kata kunci “final”, dan C++ menggunakan kata kunci “const”. Mencegah penggantian metode dapat bermanfaat jika fungsi tertentu harus selalu tidak berubah di seluruh pohon warisan.
Secara umum, metode sederhana yang mendapatkan potongan data kecil tidak perlu diganti. Kasus yang cenderung paling diuntungkan dari penggantian adalah ketika subkelas bertujuan untuk menambahkan fungsionalitas ke metode superkelas tanpa membuat metode yang sama sekali baru untuk melakukannya. Kasus-kasus yang tidak biasa di mana suatu metode perlu sepenuhnya dikerjakan ulang untuk satu jenis objek tertentu mungkin juga mendapat manfaat dari teknik ini. Kapanpun sebuah metode di-override, penting bagi programmer untuk memberikan komentar yang memadai baik pada metode superclass maupun subclass. Idealnya, komentar ini harus menjelaskan apa yang dilakukan setiap varian metode, serta bagaimana dan mengapa mereka berbeda.