public
interface
Base{
public
void
base();
}
class
Child1
extends
Base{
public
void
base(){}
//实现接口方法
public
void
a(){}
//两个子类,方法不同,也中是重写父类的方法
}
class
Child2
extends
Base{
public
void
base(){}
//实现接口方法
public
void
b(){}
//两个子类,方法不同,也中是重写父类的方法
}
public
class
Other{
public
static
void
main(String[] args){
}
public
static
calc(Base b){
b.base();
//调用接口方法
if
(b
instanceof
Child1){
((Child1)b).a();
//为了转型安全,使用intanceof 先判断是不是Child1的对象
}
else
if
(b
instanceof
Child2){
((Child2)b).b();
//为了转型安全,使用intanceof 先判断是不是Child2的对象
}
}
}
必须使用instanceof的情况,假设类A有两个子类B和C,需要运行时根据类B或C的对象来执行不同的逻辑,这种情况就必须用instanceof。较常出现这种情况是当使用Vector,由于其内部存储的是Object,需将其向下转型才能正常使用。此外解决这类问题还有一种方式就是使用try/catch语句块,不过一般的情况不建议使用try/catch语句块