java - Apabila pembolehubah ahli dengan nama yang sama dipanggil secara polimorfik, mengapa pembolehubah ahli kelas induk diakses?
女神的闺蜜爱上我
女神的闺蜜爱上我 2017-06-12 09:27:03
0
2
950

Saya baru mula meneka bahawa memandangkan pembolehubah ahli kelas induk dan kelas anak masing-masing disimpan dalam timbunan, ini mungkin kerana kelas induk wujud, jadi pembolehubah ahli kelas induk ditemui dahulu. Kemudian saya mengujinya dan kodnya adalah seperti berikut:

package test;

public class Polymorphism {
    public static void main(String[] args) {
        F f = new Z();
        f.show();
        System.out.println("f:"+f);
        System.out.println("f:"+f.a);
    }
}

abstract class F{
    int a = 10;
    public abstract void show();
}
class Z extends F{
    int a = 5;
    public void show(){
        System.out.println("Z:"+this);
        System.out.println("Z:"+this.a);
    }
}

Outputnya ialah:
Z:test.Z@15db9742
Z:5
f:test.Z@15db9742
f:10

f dan ini menghala ke objek yang sama dan mengakses pembolehubah yang sama, tetapi hasilnya berbeza, jadi tekaan saya di atas mesti salah. Jadi apa sebenarnya yang menyebabkan panggilan polimorfik kepada pembolehubah ahli dengan nama yang sama untuk mengakses pembolehubah ahli kelas induk?

女神的闺蜜爱上我
女神的闺蜜爱上我

membalas semua(2)
Ty80

f merujuk kepada objek subkelas. Saya hanya mendengar tentang menulis semula dan membebankan kaedah, tetapi bukan pembolehubah kelas Program yang saya jalankan bergantung pada situasi Jika kaedah dipanggil, ia adalah objek sebenar yang ditunjukkan (objek sebenar di sini ialah subkelas Kaedah objek Z), jika pembolehubah kelas mempunyai nama yang sama, ialah nilai pembolehubah kelas objek hidup.

扔个三星炸死你

Menulis semula, membebankan dan memautkan kaedah yang dinamik dalam Java membentuk polimorfisme ialah ungkapan yang berbeza bagi perkara yang sama.

Contoh anda ialah polimorfisme yang ditunjukkan dengan kaedah penulisan semula.

Apa yang diisytiharkan ialah kelas induk F, yang sebenarnya menunjuk kepada subkelas Z. Ini bersamaan dengan penukaran jenis ke atas, kerana Z juga diwarisi daripada F, jadi ia boleh ditukar ke atas Sekarang Z adalah jenis F.

Jadi di sini pemboleh ubah f diinstakan oleh Z, tetapi ia adalah jenis F dan menunjukkan ciri-ciri F.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan