多态需要满足三个条件:
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(); } }
运行结果:
猫在睡觉
猫在吃饭
猫在走路
猫在喝水