191/192对象的向下转型和用instanceof关键字进行类型判断
对象的向下转型
//向下转型进行“还原”动作
Cat cat = (cat) animal;
cat.catchMouse(); // 猫抓老鼠
用instanceof关键字进行类型判断
父类 public class Fu { public void eat(){ System.out.println("吃鱼"); } } 子类 public class Zi extends Fu{ public void eat(){ System.out.println("吃鱼"); } public void catchMouse(){ System.out.println("看门"); } } public class dog extends Fu{ public void eat(){ System.out.println("SHIT"); } public void watchHouse(){ System.out.println("看家"); } } 复制代码 测试类 public class text { public static void main(String[] args) { Fu fz = new Zi(); fz.eat(); if (fz instanceof dog) { dog dog = (dog) fz; dog.watchHouse(); } if (fz instanceof Zi) { Zi zi = (Zi) fz; zi.catchMouse(); } giveMeAPet(new dog()); } public static void giveMeAPet (Fu fu) { if (fu instanceof dog) { dog g = (dog) fu; g.watchHouse(); } if ( fu instanceof Zi){ Zi zi = (Zi) fu; zi.catchMouse(); } }
packagecom.zyh.test;public classPerson {public voidplay(){ System.out.println("Person play..."); } }class Boy extendsPerson{public voidplay(){ System.out.println("boy play..."); }public voidrun(){ System.out.println("run play..."); } }classRunMain{public static voidmain(String[] args){ Person b= new Boy();//向上转型 b.play(); System.out.println("-------------------------"); Boy b1=(Boy)b;//向下转型 b1.play(); b1.run(); } } 结果:
public class Fu { public void eat(){ System.out.println("吃小鱼干"); } } public class Zi extends Fu{ public void eat(){ System.out.println("吃罐头"); } public void catchMouse(){ System.out.println("看大门"); } } public class dog extends Fu{ public void eat(){ System.out.println("SHIT"); } public void watchHouse(){ System.out.println("看大门"); } } public class text { public static void main(String[] args) { Fu fz = new Zi(); fz.eat(); if (fz instanceof dog) { dog dog = (dog) fz; dog.watchHouse(); } if (fz instanceof Zi) { Zi zi = (Zi) fz; zi.catchMouse(); } giveMeAPet(new dog()); } public static void giveMeAPet (Fu fu) { if (fu instanceof dog) { dog g = (dog) fu; g.watchHouse(); } if ( fu instanceof Zi){ Zi zi = (Zi) fu; zi.catchMouse(); } }