class SpaceShip{
public String CollideWith
(Asteroid a
){ return a.CollideWith(this);
}
public String CpllideWith
(ExplodingAsteroid ea
){ return ea.CollideWith(this);
}
}
class GiantSpaceShip extends SpaceShip{
public String CollideWith
(Asteroid a
){ return a.CollideWith(this);
}
public String CpllideWith
(ExplodingAsteroid ea
){ return ea.CollideWith(this);
}
}
class Asteroid{
public String CollideWith
(SpaceShip ss
){ return "Asteroide acertou uma nave";
}
public String CollideWith
(GiantSpaceShip gss
){ return "Asteroide acertou uma nave gigante";
}
}
class ExplodingAsteroid extends Asteroid{
public String CollideWith
(SpaceShip ss
){ return "Asteroide explosivo acertou uma nave";
}
public String CollideWith
(GiantSpaceShip gss
){ return "Asteroide explosivo acertou uma nave gigante";
}
}
class Ideone
{
{
SpaceShip A = new SpaceShip();
GiantSpaceShip B = new GiantSpaceShip();
Asteroid normal = new Asteroid();
ExplodingAsteroid explosivo = new ExplodingAsteroid();
System.
out.
println(A.
CollideWith(normal
)); System.
out.
println(A.
CollideWith(explosivo
)); System.
out.
println(B.
CollideWith(normal
)); System.
out.
println(B.
CollideWith(explosivo
)); }
}
Y2xhc3MgU3BhY2VTaGlwewoJcHVibGljIFN0cmluZyBDb2xsaWRlV2l0aChBc3Rlcm9pZCBhKXsKCQlyZXR1cm4gYS5Db2xsaWRlV2l0aCh0aGlzKTsKCX0KCXB1YmxpYyBTdHJpbmcgQ3BsbGlkZVdpdGgoRXhwbG9kaW5nQXN0ZXJvaWQgZWEpewoJICAgIHJldHVybiBlYS5Db2xsaWRlV2l0aCh0aGlzKTsKCX0KfQpjbGFzcyBHaWFudFNwYWNlU2hpcCBleHRlbmRzIFNwYWNlU2hpcHsKCXB1YmxpYyBTdHJpbmcgQ29sbGlkZVdpdGgoQXN0ZXJvaWQgYSl7CgkJcmV0dXJuIGEuQ29sbGlkZVdpdGgodGhpcyk7Cgl9CglwdWJsaWMgU3RyaW5nIENwbGxpZGVXaXRoKEV4cGxvZGluZ0FzdGVyb2lkIGVhKXsKCQlyZXR1cm4gZWEuQ29sbGlkZVdpdGgodGhpcyk7Cgl9Cn0KCmNsYXNzIEFzdGVyb2lkewoJcHVibGljIFN0cmluZyBDb2xsaWRlV2l0aChTcGFjZVNoaXAgc3MpewoJCXJldHVybiAiQXN0ZXJvaWRlIGFjZXJ0b3UgdW1hIG5hdmUiOwoJfQoJcHVibGljIFN0cmluZyBDb2xsaWRlV2l0aChHaWFudFNwYWNlU2hpcCBnc3MpewoJCXJldHVybiAiQXN0ZXJvaWRlIGFjZXJ0b3UgdW1hIG5hdmUgZ2lnYW50ZSI7Cgl9Cn0KY2xhc3MgRXhwbG9kaW5nQXN0ZXJvaWQgZXh0ZW5kcyBBc3Rlcm9pZHsKCXB1YmxpYyBTdHJpbmcgQ29sbGlkZVdpdGgoU3BhY2VTaGlwIHNzKXsKCQlyZXR1cm4gIkFzdGVyb2lkZSBleHBsb3Npdm8gYWNlcnRvdSB1bWEgbmF2ZSI7Cgl9CglwdWJsaWMgU3RyaW5nIENvbGxpZGVXaXRoKEdpYW50U3BhY2VTaGlwIGdzcyl7CgkJcmV0dXJuICJBc3Rlcm9pZGUgZXhwbG9zaXZvIGFjZXJ0b3UgdW1hIG5hdmUgZ2lnYW50ZSI7Cgl9Cn0KCmNsYXNzIElkZW9uZQp7CglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb24KCXsKCQlTcGFjZVNoaXAgQSA9IG5ldyBTcGFjZVNoaXAoKTsKCQlHaWFudFNwYWNlU2hpcCBCID0gbmV3IEdpYW50U3BhY2VTaGlwKCk7CgkJQXN0ZXJvaWQgbm9ybWFsID0gbmV3IEFzdGVyb2lkKCk7CgkJRXhwbG9kaW5nQXN0ZXJvaWQgZXhwbG9zaXZvID0gbmV3IEV4cGxvZGluZ0FzdGVyb2lkKCk7CgkJU3lzdGVtLm91dC5wcmludGxuKEEuQ29sbGlkZVdpdGgobm9ybWFsKSk7CgkJU3lzdGVtLm91dC5wcmludGxuKEEuQ29sbGlkZVdpdGgoZXhwbG9zaXZvKSk7CgkJU3lzdGVtLm91dC5wcmludGxuKEIuQ29sbGlkZVdpdGgobm9ybWFsKSk7CgkJU3lzdGVtLm91dC5wcmludGxuKEIuQ29sbGlkZVdpdGgoZXhwbG9zaXZvKSk7Cgl9Cn0=