Base父类代码如下
public class Base {
public static String showme(){
return "Base";
}
public void print(){
System.out.println(showme());
}
}
Sub子类代码如下
public class Sub extends Base {
public static String showme(){
return "Sub";
}
}
main函数如下
public class AppMain {
public static void main(String args[]){
Base base=new Sub();
base.print();
Sub sub=new Sub();
sub.print();
}
}
打印结果两个都为Base
请问怎样解释在print方法中showme()方法的调用与什么有关?
Untuk kaedah statik, arahan invokestatik digunakan Arahan invokestatik tidak memerlukan rujukan contoh sebagai operan Ia hanya memerlukan rujukan simbol untuk kaedah statik, dan beberapa perkataan kaedah cetakan Kod bahagian:
Seperti yang anda lihat, invokestatic telah menentukan bahawa Base.showme dipanggil, jadi cara anda memanggil kaedah cetakan tidak akan mengubah tingkah laku invokestatic.
Selain itu, saya merasakan penyoal mempunyai pemahaman yang salah tentang pengikatan statik dan pengikatan dinamik Saya cadangkan penyoal merujuk kepada soalan ini: Java, memanggil kaedah polimorfik dalam pembina
Subkelas boleh mewarisi sifat statik dan kaedah statik kelas induk, tetapi mereka tidak boleh mengatasi kaedah statik.
Jika terdapat label kaedah dalam subkelas yang mempunyai label kaedah yang sama dengan kelas induk (nama kaedah yang sama, jenis parameter yang sama, jenis nilai pulangan yang sama dan juga tahap akses yang sama), ia hanya boleh bermakna bahawa yang baharu dicipta untuk subkelas Kaedah statik dengan nama yang sama dengan kelas induk, bukannya menimpa kaedah statik kelas induk.
Seperti yang @kylewang menunjukkan kod byte bahagian kaedah cetakan
Panggilan kaedah dinyatakan dengan jelas sebagai Base.showme()