/* package whatever; // don't place package name! */
import java.util.* ;
import java.lang.* ;
import java.io.* ;
class Tester {
public static abstract class A {
abstract void work( ) ;
void huh( Tester t) {
t.make ( this ) ;
}
}
public static class B extends A {
@Override
void work( ) {
}
}
public static class C extends A {
@Override
void work( ) {
}
}
public static class BB extends B {
@Override
void work( ) {
}
}
void make( A a) {
a.work ( ) ;
System .
out .
println ( "A generic" ) ; }
void make( B b) {
b.work ( ) ;
System .
out .
println ( "B overload" ) ; }
void make( BB b) {
b.work ( ) ;
System .
out .
println ( "BB overload" ) ; }
void make( C c) {
c.work ( ) ;
System .
out .
println ( "C overload" ) ; }
public static class Tester2 extends Tester {
@Override
void make( A a) {
super .make ( a) ;
System .
out .
println ( "Tester2" ) ; }
@Override
void make( B b) {
super .make ( b) ;
System .
out .
println ( "Tester2" ) ; }
@Override
void make( BB b) {
super .make ( b) ;
System .
out .
println ( "Tester2" ) ; }
@Override
void make( C c) {
super .make ( c) ;
System .
out .
println ( "Tester2" ) ; }
}
public static void main
( String [ ] args
) {
Tester t = new Tester( ) ;
Tester t2 = new Tester2( ) ;
B b = new B( ) ;
BB bb = new BB( ) ;
C c = new C( ) ;
A ab = new B( ) ;
A abb = new BB( ) ;
A ac = new C( ) ;
B bbb = new BB( ) ;
t.make ( b) ;
t.make ( bb) ;
t.make ( c) ;
t.make ( ab) ;
t.make ( abb) ;
t.make ( ac) ;
t.make ( bbb) ;
b.huh ( t) ;
bb.huh ( t) ;
c.huh ( t) ;
b.huh ( t2) ;
bb.huh ( t2) ;
c.huh ( t2) ;
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgpjbGFzcyBUZXN0ZXIgewogICAgICAgCiAKICAgICAgICBwdWJsaWMgc3RhdGljIGFic3RyYWN0IGNsYXNzIEEgewogICAgICAgICAgICAgICAgYWJzdHJhY3Qgdm9pZCB3b3JrKCk7CiAgICAgICAgICAgICAgICB2b2lkIGh1aChUZXN0ZXIgdCkgewogICAgICAgICAgICAgICAgICAgICAgICB0Lm1ha2UodGhpcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQiBleHRlbmRzIEEgewogICAgICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgICAgICB2b2lkIHdvcmsoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQiIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgCiAgICAgICAgfQogICAgICAgCiAgICAgICAgcHVibGljIHN0YXRpYyBjbGFzcyBDIGV4dGVuZHMgQSB7CiAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgICAgIHZvaWQgd29yaygpIHsKICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDIik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgCiAgICAgICAgcHVibGljIHN0YXRpYyBjbGFzcyBCQiBleHRlbmRzIEIgewogICAgICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgICAgICB2b2lkIHdvcmsoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQkIiKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAKICAgICAgIAogICAgICAgCiAgICAgICAgdm9pZCBtYWtlKEEgYSkgewogICAgICAgICAgICAgICAgYS53b3JrKCk7CiAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkEgZ2VuZXJpYyIpOwogICAgICAgIH0KICAgICAgIAogICAgICAgIHZvaWQgbWFrZShCIGIpIHsKICAgICAgICAgICAgICAgIGIud29yaygpOwogICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCIG92ZXJsb2FkIik7CiAgICAgICAgfQogICAgICAgCiAgICAgICAgdm9pZCBtYWtlKEJCIGIpIHsKICAgICAgICAgICAgICAgIGIud29yaygpOwogICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJCQiBvdmVybG9hZCIpOwogICAgICAgIH0KICAgICAgIAogICAgICAgIHZvaWQgbWFrZShDIGMpIHsKICAgICAgICAgICAgICAgIGMud29yaygpOwogICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDIG92ZXJsb2FkIik7CiAgICAgICAgfQogICAgICAgCiAgICAgICAKICAgICAgIAogICAgICAgCiAgICAgICAgcHVibGljIHN0YXRpYyBjbGFzcyBUZXN0ZXIyIGV4dGVuZHMgVGVzdGVyIHsKIAogICAgICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgICAgICB2b2lkIG1ha2UoQSBhKSB7CiAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIHN1cGVyLm1ha2UoYSk7CiAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdGVyMiIpOwogICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgICAgIHZvaWQgbWFrZShCIGIpIHsKICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgc3VwZXIubWFrZShiKTsKICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0ZXIyIik7CiAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICAgICAgdm9pZCBtYWtlKEJCIGIpIHsKICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgc3VwZXIubWFrZShiKTsKICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUZXN0ZXIyIik7CiAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICAgICAgdm9pZCBtYWtlKEMgYykgewogICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICBzdXBlci5tYWtlKGMpOwogICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3RlcjIiKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgCiAKICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgIAogICAgICAgIH0KICAgICAgIAogICAgICAgCiAKICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgVGVzdGVyIHQgPSBuZXcgVGVzdGVyKCk7CiAgICAgICAgICAgICAgICBUZXN0ZXIgdDIgPSBuZXcgVGVzdGVyMigpOwogICAgICAgICAgICAgICAgQiBiID0gbmV3IEIoKTsKICAgICAgICAgICAgICAgIEJCIGJiID0gbmV3IEJCKCk7CiAgICAgICAgICAgICAgICBDIGMgPSBuZXcgQygpOwogICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIEEgYWIgPSBuZXcgQigpOwogICAgICAgICAgICAgICAgQSBhYmIgPSBuZXcgQkIoKTsKICAgICAgICAgICAgICAgIEEgYWMgPSBuZXcgQygpOwogICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIEIgYmJiID0gbmV3IEJCKCk7CiAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIHQubWFrZShiKTsKICAgICAgICAgICAgICAgIHQubWFrZShiYik7CiAgICAgICAgICAgICAgICB0Lm1ha2UoYyk7CiAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuIik7CiAgICAgICAgICAgICAgICB0Lm1ha2UoYWIpOwogICAgICAgICAgICAgICAgdC5tYWtlKGFiYik7CiAgICAgICAgICAgICAgICB0Lm1ha2UoYWMpOwogICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcbiIpOwogICAgICAgICAgICAgICAgdC5tYWtlKGJiYik7CiAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuIik7CiAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgYi5odWgodCk7CiAgICAgICAgICAgICAgICBiYi5odWgodCk7CiAgICAgICAgICAgICAgICBjLmh1aCh0KTsKICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG4iKTsKICAgICAgICAgICAgICAgIGIuaHVoKHQyKTsKICAgICAgICAgICAgICAgIGJiLmh1aCh0Mik7CiAgICAgICAgICAgICAgICBjLmh1aCh0Mik7CiAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgCiAgICAgICAgfQogICAgICAgCn0=