type T4 = T2
Это дает дополнительное имя T4 существующему типу T2.Это не вводит новый тип.Другими словами, T2 и T4 всегда взаимозаменяемы.Это должно объяснить, почему вызов v_T4.Hello(v_T4)
работает.Все следующие вызовы являются синонимами с точки зрения типов (но игнорируя, что v_T2 и v_T4 отличаются значения ):
var v_T2 T2
var v_T4 T4
v_T2.Hello(v_T2)
v_T2.Hello(v_T4)
v_T4.Hello(v_T2)
v_T4.Hello(v_T4)
type T3 T2
Это определяет новый типT3, который отличается от всех других типов.Согласно правилам типа, T3 не наследует методы T2 .Но поскольку они имеют один и тот же базовый тип, поля T3 и T2 одинаковы, включая встроенный T1.Это в свою очередь продвигает методы T1 к T3 .