Rumah  >  Soal Jawab  >  teks badan

java - Apabila pembolehubah ahli dengan nama yang sama dipanggil secara polimorfik, mengapa pembolehubah ahli kelas induk diakses?

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?

女神的闺蜜爱上我女神的闺蜜爱上我2686 hari yang lalu916

membalas semua(2)saya akan balas

  • PHP中文网

    PHP中文网2017-06-12 09:29:03

    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.

    balas
    0
  • 扔个三星炸死你

    扔个三星炸死你2017-06-12 09:29:03

    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.

    balas
    0
  • Batalbalas