import java.lang.reflect.Method;
class Ideone {
Foo foo = new Bar();
// cast to type
((Bar)foo).start("via casting");
// cast to interface
((Startable)foo).start("via casting2");
// reflection
Method m
= foo.
getClass().
getDeclaredMethod("start",
String.
class); m.invoke(foo, "via reflection");
}
public interface Startable {
}
public static class Foo {
}
public static class Bar extends Foo implements Startable {
public void start
(String arg
) { System.
out.
println("Hello World: " + arg
); }
}
}
aW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKY2xhc3MgSWRlb25lIHsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKCQlGb28gZm9vID0gbmV3IEJhcigpOwoJCQoJCS8vIGNhc3QgdG8gdHlwZQoJCSgoQmFyKWZvbykuc3RhcnQoInZpYSBjYXN0aW5nIik7CgkJCgkJLy8gY2FzdCB0byBpbnRlcmZhY2UKCQkoKFN0YXJ0YWJsZSlmb28pLnN0YXJ0KCJ2aWEgY2FzdGluZzIiKTsKCgkJLy8gcmVmbGVjdGlvbgoJCU1ldGhvZCBtID0gZm9vLmdldENsYXNzKCkuZ2V0RGVjbGFyZWRNZXRob2QoInN0YXJ0IiwgU3RyaW5nLmNsYXNzKTsKCQltLmludm9rZShmb28sICJ2aWEgcmVmbGVjdGlvbiIpOwoJfQoJCglwdWJsaWMgaW50ZXJmYWNlIFN0YXJ0YWJsZSB7CgkJdm9pZCBzdGFydChTdHJpbmcgYXJnKTsKCX0KCXB1YmxpYyBzdGF0aWMgY2xhc3MgRm9vIHsKCX0KCQoJcHVibGljIHN0YXRpYyBjbGFzcyBCYXIgZXh0ZW5kcyBGb28gaW1wbGVtZW50cyBTdGFydGFibGUgewoJCXB1YmxpYyB2b2lkIHN0YXJ0KFN0cmluZyBhcmcpIHsKCQkJU3lzdGVtLm91dC5wcmludGxuKCJIZWxsbyBXb3JsZDogIiArIGFyZyk7CgkJfQoJfQp9