статические методы статически связаны с их именем класса, потому что m является типом класса Main, тогда после компиляции это будет выглядеть следующим образом Main.method (); после компиляции вашего класса запустите следующую команду: javap -c Main вы можете увидеть код сборки jvm для класса Main, и вы увидите следующее это динамическое связывание
у приведенный ниже код выводит «Main»?
public class Main
{
public static void method()
{
System.out.println("Main");
}
public static void main(String[] args)
{
Main m = new SubMain();
m.method();
}
}
class SubMain extends Main
{
public static void method()
{
System.out.println("SubMain");
}
}
Во время выполнения,m
указывает на случайSubmain
, поэтому он должен концептуально напечатать «SubMain».