多态

多态需要满足三个条件:

1、继承。

2、重写。

3、父类数据类型的引用指向子类对象。

    
    public void sleep(){
        System.out.println("动物在睡觉");
    }
    
    public void eat(){
        System.out.println("动物在吃饭");
    }
    
    public void walk(){
        System.out.println("动物在走路");
    }
    
    public void walk1(){
        System.out.println("动物在走路");
    }
}

class UserAction extends BaseAction{
    
    public void sleep(){
        System.out.println("猫在睡觉");
    }
    
    public void eat(){
        System.out.println("猫在吃饭");
    }
    
    public void walk(){
        System.out.println("猫在走路");
    }
    
    public void drinking(){
        System.out.println("猫在喝水");
    }
}

class Main{
    
    public static void main(String[] args){
        BaseAction b = new UserAction();
        b.sleep();
        b.eat();
        b.walk();
        //b.drinking();//注释掉,编译报错
    }
}

运行结果:

猫在睡觉
猫在吃饭
猫在走路

从代码中可以看出,多态存在弊端,就是不能使用子类特有的属性和方法,在Main类中使用UserAction中的drinking()方法时会编译报错。

如果一定要使用UserAction中的drinking()方法,可以使用使BaseAction强制变回UserAction类型即可。

    
    public static void main(String[] args){
        BaseAction b = new UserAction();
        b.sleep();
        b.eat();
        b.walk();
        UserAction u = (UserAction)b;
        u.drinking();
    }
}

运行结果:

猫在睡觉
猫在吃饭
猫在走路
猫在喝水

原文地址:https://www.cnblogs.com/guochang/p/9554158.html