Testing for type A A-virtual A.SayHi()='Hi ' A-interface Greeter.SayHi()='Hi ' A-virtual A.SayHiTwice()='Hi Hi ' A-interface Greeter.SayHiTwice()='Hi Hi ' End testing for type A Testing for type B B-virtual B.SayHi()='Hello ' B-interface Greeter.SayHi()='Hello ' B-interface Greeter2.SayHi()='Hello ' B-virtual B.SayHiTwice()='I say Hello Hello ' B-interface Greeter.SayHiTwice()='I say Hello Hello ' B-interface Greeter2.SayHiTwice()='I say Hello Hello ' End testing for type B Testing for type C C-virtual A.SayHi()='Hi ' C-virtual C.SayHi()='Hi ' C-interface Greeter.SayHi()='Hi ' C-virtual A.SayHiTwice()='You don't control me' C-virtual C.SayHiTwice()='You don't control me' C-interface Greeter.SayHiTwice()='You don't control me' End testing for type C Testing for type D D-virtual D.GetName()='Alex ' D-interface Greeter3.GetName()='Alex ' D-virtual D.SayHi()='Hello Alex ' D-interface Greeter.SayHi()='Hello Alex ' D-interface Greeter3.SayHi()='Hello Alex ' D-virtual D.SayHiTwice()='Hello Alex Hello Alex ' D-interface Greeter.SayHiTwice()='Hello Alex Hello Alex ' D-interface Greeter3.SayHiTwice()='Hello Alex Hello Alex ' End testing for type D Testing for type E E-virtual A.SayHi()='Hi2 ' E-virtual E.SayHi()='Hi2 ' E-interface Greeter.SayHi()='Hi2 ' E-interface Greeter2.SayHi()='Hi2 ' E-virtual A.SayHiTwice()='I say Hi2 Hi2 ' E-virtual E.SayHiTwice()='I say Hi2 Hi2 ' E-interface Greeter.SayHiTwice()='I say Hi2 Hi2 ' E-interface Greeter2.SayHiTwice()='I say Hi2 Hi2 ' End testing for type E Testing for type F F-interface Attendant.GetPlace()='android' F-virtual F.GetPlace()='android' F-virtual A.SayHi()='Hi ' F-interface Attendant.SayHi()='Hi ' F-virtual F.SayHi()='Hi ' F-interface Greeter.SayHi()='Hi ' F-virtual A.SayHiTwice()='We can override both interfaces' F-interface Attendant.SayHiTwice()='We can override both interfaces' F-virtual F.SayHiTwice()='We can override both interfaces' F-interface Greeter.SayHiTwice()='We can override both interfaces' End testing for type F Testing for type G G-interface Attendant.GetPlace()='android' G-virtual G.GetPlace()='android' G-interface Attendant.SayHi()='welcome to android' G-virtual G.SayHi()='welcome to android' G-interface Attendant.SayHiTwice()='welcome to androidwelcome to android' G-virtual G.SayHiTwice()='welcome to androidwelcome to android' End testing for type G Testing for type H H-interface Extension.SayHi()='welcome ' H-virtual H.SayHi()='welcome ' End testing for type H Testing for type I I-virtual A.SayHi()='Hi ' I-interface Greeter.SayHi()='Hi ' I-interface Greeter2.SayHi()='Hi ' I-virtual I.SayHi()='Hi ' I-virtual A.SayHiTwice()='I say Hi Hi ' I-interface Greeter.SayHiTwice()='I say Hi Hi ' I-interface Greeter2.SayHiTwice()='I say Hi Hi ' I-virtual I.SayHiTwice()='I say Hi Hi ' End testing for type I Testing for type J J-virtual A.SayHi()='Hi ' J-interface Greeter.SayHi()='Hi ' J-virtual J.SayHi()='Hi ' J-virtual A.SayHiTwice()='Hi Hi ' J-interface Greeter.SayHiTwice()='Hi Hi ' J-virtual J.SayHiTwice()='Hi Hi ' End testing for type J Testing for type K K-interface Foo.bar()='foobar' K-virtual K.bar()='foobar' End testing for type K Testing for type L L-interface Foo.bar()='foobar' L-virtual K.bar()='foobar' L-virtual L.bar()='foobar' End testing for type L Testing for type M M-interface Foo.bar()='BAZ!' M-interface Fooer.bar()='BAZ!' M-virtual K.bar()='BAZ!' M-virtual L.bar()='BAZ!' M-virtual M.bar()='BAZ!' End testing for type M