Dalam Java, polimorfisme dibagi menjadi dua jenis: polimorfisme waktu kompilasi (kelebihan muatan) dan polimorfisme run-time (timpa). Polimorfisme waktu kompilasi juga disebut pra-ikatan, dan polimorfisme run-time juga disebut pasca-ikatan.
Inilah contohnya:
kelas publik OverloadAndOrwrite {public static void main (string [] args) {a a1 = new a (); A a2 = b baru (); B b = b baru (); C c = c baru (); D d = d () baru; System.out.print ("A1.Print (A1):"); a1.print (a1); // output a dan a system.out.print ("a1.print (b):"); a1.print (b); // output a dan a: alasannya adalah bahwa tidak ada metode dengan parameter b dalam a, sehingga metode dengan parameter A akan dipanggil, karena b adalah sistem.out.print ("a1.print (c):"); A1.Print (C); // Output A dan A: Alasannya adalah bahwa tidak ada metode dengan parameter C dalam A, sehingga metode dengan parameter A akan dipanggil, karena C diwarisi dari B, dan B diwarisi dari sistem.out.print ("A1.Print (D):"); a1.print (d); // output A dan D: Alasannya adalah karena ada metode dengan parameter d di A, metode dengan parameter D akan disebut system.out.print ("a2.print (b):"); A2.Print (B); // Output B dan A: Alasannya adalah bahwa entri adalah A. Pertama, periksa apakah ada metode cetak dengan parameter B dalam A. Jika Anda menemukan bahwa tidak ada, maka cari metode dengan parameter A. Karena B mewarisi dari A. Saya menemukan bahwa metode seperti itu ada. Kemudian periksa lagi apakah metode ini telah ditulis ulang dalam B. Ditemukan bahwa ada metode penulisan ulang. Langsung hubungi metode penulisan ulang system.out.print ("a2.print (c):"); a2.print (c); // Output B dan A: Alasannya adalah bahwa entri adalah A. Pertama, periksa apakah ada metode cetak dengan parameter C dalam A. Jika tidak ada, maka cari apakah ada metode dengan parameter B. Karena C diwarisi dari B dan tidak ada metode seperti itu, maka cari metode cetak dengan RE -ditulis kembali. Karena B warisan dari A. Jika ada metode seperti itu, kemudian periksa apakah metode ini ditulis kembali. System.out.print ("A2.Print (D):"); a2.print (d); // output A dan D: Alasannya adalah bahwa entri adalah A. Jika ada metode dengan parameter D dalam A, periksa bahwa metode ini belum ditulis ulang dalam B. Oleh karena itu, hasil dari metode ini dalam output A adalah output; System.out.print ("A2.Print (A2):"); A2.Print (A2); // Output B dan A; Alasannya adalah bahwa jenis A2 adalah A, sehingga metode cetak dengan parameter A dalam A akan dipanggil, tetapi yang baru di sebelah kanan A2 adalah B, jadi karena ada metode dengan parameter A dalam B, metode ini di B diadopsi System.out.print ("b.print (b):"); b.print (b); // output b dan b; Alasan: Entri adalah B, jadi periksa apakah fungsi cetak dengan parameter B ada di B, dan jika ada output langsung; System.out.print ("B.Print (C):"); b.print (c); // output b dan b; Alasan: Entri adalah B, jadi jika Anda melihat apakah fungsi cetak dengan parameter C ada di B. Jika Anda menemukan itu tidak ada, maka Anda melihat apakah fungsi cetak dengan parameter B ada. Jika Anda menemukan itu ada, dan jika metode ini tidak ditulis ulang di C, maka Anda akan secara langsung menghasilkannya; Satu hal yang perlu diperhatikan adalah bahwa Anda juga perlu memeriksa apakah metode cetak dengan parameter C ada di A, karena B mewarisi dari A. Jika ada, Anda akan menggunakan metode ini dengan hasilnya. Dengan cara ini, hasil output akan menjadi A dan C System.out.print ("b.print (d):"); b.print (d); // output a dan d; Alasan: Entri adalah B. Meskipun tidak ada fungsi cetak dengan parameter D dalam B, B yang diwariskan dari A. Ada fungsi cetak dengan parameter D dalam A, sehingga output adalah hasil parameter D di A; }} class a {public void print (a) {System.out.println ("a dan a"); } public void print (d d) {System.out.println ("a dan d"); } // public void print (c c) // {// system.out.println ("a dan c"); //}} kelas B memperluas A {public void print (b b) {system.out.println ("b dan b"); } public void print (a) {System.out.println ("b dan a"); }} class c memperluas b {} class d memperluas c {}Apa yang perlu dijelaskan di sini adalah:
Untuk a2 = b baru ();
Jika A2 dicetak secara terpisah, hasil cetak adalah B@(kode hash) alih -alih@(kode hash), tetapi ini tidak berarti bahwa jenis A2 adalah tipe B, karena ketika kita memanggil A2.Print (A2); Dalam program di atas, hasil output adalah B dan A bukannya A dan A (jika A2 diasumsikan B, metode cetak dengan parameter B di kelas A harus dipanggil, karena tidak ada metode seperti itu, maka pilihan kedua untuk memanggil metode dengan parameter A harus output A dan A, karena B adalah subclass dari A).
Di atas adalah contoh analisis kode penulisan ulang dan kelebihan beban. Saya berharap ini akan membantu siswa yang belajar Java.