若是无多态,示例代码为:
package cn.sg.animal; /** * 多态的应用,无多态的时候 * * @author Administrator * */ public class Main { public static void main(String[] args) { showCat(new Cat()); showDog(new Dog()); showBear(new Bear()); }
public static void showCat(Cat cat){ cat.eat(); cat.work(); } public static void showDog(Dog dog){ dog.eat(); dog.work(); } public static void showBear(Bear bear){ bear.eat(); bear.work(); }
}
package cn.sg.animal;
public class Bear { public void eat(){ System.out.println("吃肉"); } public void work(){ System.out.println("拳击"); }
}
package cn.sg.animal;
public class Cat { public void eat(){ System.out.println("吃鱼"); } public void work(){ System.out.println("抓老鼠"); }
}
package cn.sg.animal;
public class Dog { public void eat(){ System.out.println("吃骨头"); } public void work(){ System.out.println("看家"); }
}
package cn.sg.animal;
public class Animal { public void eat(){ System.out.println("Animal eat"); } }
程序运行:
若是有多态,代码可以这样写:
package cn.sg.animal001;
public class Animal { public void eat(){ System.out.println("Animal eat"); } }
package cn.sg.animal001;
public class Main { public static void main(String[] args) { show(new Cat()); show(new Dog()); show(new Bear()); }
//Animal类具有了多态的性质 public static void show(Animal animal){ //Animal只能调用本类中已经定义的方法 animal.eat(); //Animal不能调用本类中没有定义的方法 //类型判断 if(animal instanceof Cat){ System.out.println("传进来的是Cat"); //向下转型
/**向下转型失败:Animal当中有三个子类,若是没有instanceof, * 就无法判断是cat dog 还是 bear 此时Cat cat = (Cat)animal; 就会转型失败 */ Cat cat = (Cat)animal; cat.work(); }else if(animal instanceof Dog){ System.out.println("传进来的是Dog"); //向下转型 Dog dog = (Dog)animal; dog.work(); }else if (animal instanceof Bear){ System.out.println("传进来的是Bear"); //向下转型 Bear bear = (Bear)animal; bear.work(); //向上转型 Animal animal2 =new Cat(); animal2.eat(); }
}
}
package cn.sg.animal001;
public class Bear extends Animal { public void eat(){ System.out.println("吃肉"); } public void work(){ System.out.println("拳击"); }
}
package cn.sg.animal001;
public class Cat extends Animal{ public void eat(){ System.out.println("吃鱼"); } public void work(){ System.out.println("抓老鼠"); }
}
package cn.sg.animal001;
public class Dog extends Animal{ public void eat(){ System.out.println("吃骨头"); } public void work(){ System.out.println("看家"); }
}
package cn.sg.animal001;
public class Animal { public void eat(){ System.out.println("Animal eat"); } }
程序运行:
Author:枫叶