若是无多态,示例代码为:
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:枫叶