Testing for type A A-virtual A.SayHi()='Hello ' A-interface Iface.SayHi()='Hello ' End testing for type A Testing for type B B-virtual B.SayHi()='Hello Hello ' B-interface Iface.SayHi()='Hello Hello ' B-interface Iface2.SayHi()='Hello Hello ' End testing for type B Testing for type C C-virtual C.SayHi()='Hello and welcome ' C-interface Iface.SayHi()='Hello and welcome ' End testing for type C Testing for type D D-virtual D.SayHi()='Hello Hello and welcome ' D-interface Iface.SayHi()='Hello Hello and welcome ' D-interface Iface2.SayHi()='Hello Hello and welcome ' End testing for type D Testing for type E E-virtual E.SayHi()='Hello there!' E-interface Iface.SayHi()='Hello there!' E-interface Iface3.SayHi()='Hello there!' End testing for type E Testing for type F F-virtual E.SayHi()='Hello there!' F-virtual F.SayHi()='Hello there!' F-interface Iface.SayHi()='Hello there!' F-interface Iface3.SayHi()='Hello there!' F-virtual F.SaySurprisedHi()='Hello there!!' End testing for type F Testing for type G G-virtual E.SayHi()='Hello there!?' G-virtual F.SayHi()='Hello there!?' G-virtual G.SayHi()='Hello there!?' G-interface Iface.SayHi()='Hello there!?' G-interface Iface3.SayHi()='Hello there!?' G-virtual F.SaySurprisedHi()='Hello there!!' G-virtual G.SaySurprisedHi()='Hello there!!' G-virtual G.SayVerySurprisedHi()='Hello there!!!' End testing for type G Testing for type H H-virtual H.SayConfusedHi()='Hello ?!' H-virtual A.SayHi()='Hello ?' H-virtual H.SayHi()='Hello ?' H-interface Iface.SayHi()='Hello ?' H-virtual H.SaySurprisedHi()='Hello !' End testing for type H