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{@Overridepublic void sell() {System.out.println("实体店卖东西");}}public class EletcSeller extends Seller{@Overridepublic 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);}}
