1. super();
1.1. super.i = 7;
1.2. this.setI(20) => this.i = 60;
1.3. System.out.println("i from a is " + super.i) => 7;
2. this();
2.1. this.i = 10;
2.2. System.out.println("i from b is " + this.i) => 10;
A.i dan B.i kedua-duanya adalah pakej-peribadi, B.i tidak mempunyai Override A.i, kedua-duanya adalah bebas
A.setI dan B.setI kedua-duanya awam, B.setI Override A.setI, yang dipanggil A semasa pembinaan ialah B.setI;
Pemulaan ahli B di luar pembina dilaksanakan selepas super()B.i mula-mula ditetapkan kepada 60 oleh B.setI dalam super, dan kemudian ditetapkan kepada 10 oleh pemula ahli B;
Selepas memadamkan int i = 10; dalam B, jika A dan B berada dalam pakej yang sama, B.setI mengakses A.i, dan tidak akan ada perubahan selepas A.i ditetapkan kepada 60 semasa super(), dan ia akan menjadi dicetak dua kali. Kedua-duanya adalah 60
Jika saya mengisytiharkan ahli dalam subkelas yang telah wujud dalam kelas induk, adakah tiada ralat? Ia sekurang-kurangnya menjadi amaran.
Saya hanya boleh mengatakan bahawa soalan itu terlalu jahat. Tidak mustahil untuk menulis seperti ini dalam perkembangan sebenar Anda akan menggali lubang untuk diri sendiri.
7.10 1. Pergi ke kaedah pembinaan A dan lengkapkan pembinaan parameter kosong Objek. 2.int I=7 3.setI(20) memanggil setI() subkelas Pada masa ini, I subkelas ialah 60, dan I kelas induk masih 7. 4.Cetak .i ini ialah 7 dalam kelas induk pada masa ini; (nota: pembolehubah bergantung pada pemanggil sebenar, ini ialah kelas induk semasa; kaedah ini dipanggil subkelas kerana ia telah diganti) 5.int I=10 menimpa 60 yang asal. 6, cetak ini.i Kali ini 10.
60.60 Nota: Jika anda memadamkan I subkelas, I kelas induk dipanggil secara lalai 3. Panggil setI subkelas dan berikannya kepada kelas induk. kelas induk berubah kepada 60. 5. Tiada penggantian pada masa ini, ini.i lalai untuk memanggil kelas yang saya warisi daripada kelas induk, iaitu 60.
Jujukan pelaksanaan adalah seperti berikut:
A.i
danB.i
kedua-duanya adalah pakej-peribadi,B.i
tidak mempunyai OverrideA.i
, kedua-duanya adalah bebasA.setI
danB.setI
kedua-duanya awam,B.setI
OverrideA.setI
, yang dipanggil A semasa pembinaan ialahB.setI
;Pemulaan ahli B di luar pembina dilaksanakan selepas
super()
B.i
mula-mula ditetapkan kepada 60 olehB.setI
dalam super, dan kemudian ditetapkan kepada 10 oleh pemula ahli B;Selepas memadamkan
int i = 10;
dalam B, jika A dan B berada dalam pakej yang sama,B.setI
mengaksesA.i
, dan tidak akan ada perubahan selepas A.i ditetapkan kepada 60 semasa super(), dan ia akan menjadi dicetak dua kali. Kedua-duanya adalah 60Jika saya mengisytiharkan ahli dalam subkelas yang telah wujud dalam kelas induk, adakah tiada ralat? Ia sekurang-kurangnya menjadi amaran.
Saya hanya boleh mengatakan bahawa soalan itu terlalu jahat. Tidak mustahil untuk menulis seperti ini dalam perkembangan sebenar Anda akan menggali lubang untuk diri sendiri.
7.10
1. Pergi ke kaedah pembinaan A dan lengkapkan pembinaan parameter kosong Objek.
2.int I=7
3.setI(20) memanggil setI() subkelas Pada masa ini, I subkelas ialah 60, dan I kelas induk masih 7.
4.Cetak .i ini ialah 7 dalam kelas induk pada masa ini; (nota: pembolehubah bergantung pada pemanggil sebenar, ini ialah kelas induk semasa; kaedah ini dipanggil subkelas kerana ia telah diganti)
5.int I=10 menimpa 60 yang asal.
6, cetak ini.i Kali ini 10.
60.60
Nota: Jika anda memadamkan I subkelas, I kelas induk dipanggil secara lalai
3. Panggil setI subkelas dan berikannya kepada kelas induk. kelas induk berubah kepada 60.
5. Tiada penggantian pada masa ini, ini.i lalai untuk memanggil kelas yang saya warisi daripada kelas induk, iaitu 60.
Mengenai kepentingan Degbug...