多态的实现必须有三个条件
1:必须要有继承
2:必须要有重写
3:父类引用指向子类对象
上面三个条件缺一不可
举例:
假设现在有一个父类Animal,这里为了方便,使用抽象类,Animal有唱歌、散步这两个方法,应该所有的动物都有这两个动作吧!
public interface class Animal(){void sing();
void run();}
如果这时候有Dog类和Cat类实现了这个接口
Dog.javapublic class Dog implements Animal(){@Override
public void sing(){System.out.println("狗叫");}@Override
public void run(){System.out.println("狗散步");}}Cat.javapublic class Cat implements Animal(){@Overridepublic void sing(){System.out.println("猫叫");}@Override
public void run(){System.out.println("猫散步");}}
Test.javapublic class Test(){public static void main(String [] args){Animal animal=new Dog();animal.sing();animal.run();}]
此时运行的话,控制台会打印:
狗叫
狗散步
如果此时我们想换成猫,那么只需要改半行代码就可以了
public class Test(){public static void main(String [] args){Animal animal=new Catl();animal.sing();animal.run();}]
此时运行的话,控制台会打印:
猫叫
猫散步
........
以后想换其他的动物,只要改一下就可以了,方法啥的都不用变,这样就简单多了
理解:
父类引用指向子类对象,
父类(接口)的引用就能够直接调用子类(实现类)的方法。
为什么在实际的开发过程中不采用直接创建实现类对象来调用方法呢?
这么做的主要目的还是为了能够减少开发过程中代码的修改量。