Поведение, которое вы видите - это ожидаемое поведение. Статические методы ... статические. Когда вы вызываете method_three()
, определенный в Test
, он обязательно вызовет method_two()
, определенный как Test
.
Что касается того, как "обойти" это правильное поведение ...
Самый лучший способ - сделать методы виртуальными, когда вам нужно виртуальное поведение. Если вы застряли в каком-то библиотечном коде со статическим методом, который, как вам хотелось бы, был виртуальным, вы могли бы заглянуть глубже, чтобы увидеть, есть ли причина или это просто упущение.
В противном случае вы можете определить новый method_three()
в T2
, который вызывает T2.method_two()
.