instanceOf
检查的是一个实例是否是某个特定类型的实例;只可将其与命名类型去比较,而不能与Class对象去比较
public class InstanOfApp2 {
public static void main(String[] args) {
Pet pet = new Pet();
Dog dog = new Dog();
Pug pug = new Pug();
if(pug instanceof Pet){
System.out.println("pug是Pet的一个实例");
}
if(pug instanceof Dog){
System.out.println("put也是Dog的一个实例");
}
}
}
动态的instanceOf
扩展性比较好
Pet.class.isInstance(pet);
isInstance 判断的是该类的是否属于一支继承体系
public class InstanOfApp2 {
public static void main(String[] args) {
Pet pet = new Pet();
Dog dog = new Dog();
Pug pug = new Pug();
testIsInstance(dog);
}
//在扩展Pet继承体系的时候 isInstance 就是执行该类职责的开关
public static void testIsInstance(Pet p){
Class<? extends Pet> pets = Pet.class;
if(pets.isInstance(p))
System.out.println("Pet类的一个实例是:"+p.getClass().getSimpleName());
}
}
扩展例子
public interface Fair {
}
public abstract class Seller implements Fair{
public void sell(){}
}
public class SuperMarketSeller extends Seller{
@Override
public void sell() {
System.out.println("实体店卖东西");
}
}
public class EletcSeller extends Seller{
@Override
public void sell() {
System.out.println("通过网站卖东西");
}
}
public class PeopleApp {
public static void testSuperMarket(Fair fair) throws Exception{
Class<? extends Seller> sellerClass = Seller.class;
if(sellerClass.isInstance(fair)) {
Method sell = sellerClass.getMethod("sell");
sell.invoke(fair);
System.out.println("做一些的其他的活动");
}
}
public static void main(String[] args) throws Exception {
SuperMarketSeller marketSeller = new SuperMarketSeller();
//testSuperMarket(marketSeller);
final EletcSeller eletcSeller = new EletcSeller();
testSuperMarket(eletcSeller);
}
}