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 Testing for type N N-interface Foo.bar()='foobar' N-virtual N.bar()='foobar' End testing for type N Testing for type O O-interface Foo.bar()='foobar foobar' O-interface Foo2.bar()='foobar foobar' O-virtual N.bar()='foobar foobar' O-virtual O.bar()='foobar foobar' End testing for type O Testing for type P P-interface Foo.bar()='not foobar!' P-interface Foo2.bar()='not foobar!' P-virtual N.bar()='not foobar!' P-virtual O.bar()='not foobar!' P-virtual P.bar()='not foobar!' End testing for type P Testing for type Q Q-interface on Foo: bar() threw exception! Exception is of type java.lang.IncompatibleClassChangeError Q-interface on Foo2: bar() threw exception! Exception is of type java.lang.IncompatibleClassChangeError Q-interface on Foo3: bar() threw exception! Exception is of type java.lang.IncompatibleClassChangeError Q-virtual on N: bar() threw exception! Exception is of type java.lang.IncompatibleClassChangeError Q-virtual on O: bar() threw exception! Exception is of type java.lang.IncompatibleClassChangeError Q-virtual on Q: bar() threw exception! Exception is of type java.lang.IncompatibleClassChangeError End testing for type Q