Во-первых, вы получите ошибку во время компиляции, потому что virtual
члены не могут быть приватными, что A.m1
как написано.
Во-вторых, как только вы исправите это, вы получите компиляциюпредупреждение о том, что B.m1
скрывает унаследованный элемент A.m1
.
В-третьих, если вы сделаете что-то подобное:
A a = new B();
a.m1();
Это вызовет A.m1
, тогда как если вы вставите override
в определении B.m1
, тогда приведенное выше вызовет B.m1
.Однако, если вы вставите new
в определение B.m1
, то приведенное выше все равно вызовет A.m1
, но пропустит предупреждение во время компиляции.