1、单说概念的其实很难理解,我们结合程序来就比较烂衣茫庥好理解了。要实现多态就一定要满足三个条件。首先要有继承,其次是方法的重写,最后是父类引用只想子类对象。这里我举一个最常用的事例“animal”类。把“animal”作为什么“狗”,“猫” “老虎”......的父类,因为它们都是动物。并且这里定义父类里面的方法为“叫”,因为所有的动物基本上都会叫(天生有问题的除外)。
2、首先要有继承。
3、为了实现多态三个条件第一个继承已经有了。第二个就是重写方法。我们定义的原来的方法是:public 即枢潋雳void yell() { System.out.println("一般的叫声"); }重写过之后的是:public void yell() { System.out.println("狗的叫声"); }
4、然后我们建立一个test类。写个测试方法测试动物叫声。”
5、编译时类型由声明时类型决定 这里声明一个“animal”, “c”是animal类型,编译器只认这个“animal” 然后找到“yell”方法。而运行类型时有实际类型值决定。
6、这里“Animal dog = new Dog();”就用到了“父类引用指向子类”。“dog”继承了“Animal”拥有“animal”的属相和方法。
7、然后根据内存图来分析。首先“栈”里有我们的“dog”“堆”里面有我们的加载的代码之类的东西。这些之前都有过介绍,不会的可以去看下我之前写过的或者百度搜索下。
8、因为有继承关系,所以“dog”的“super”属性指向它继承的“animal”,而“object”是所有的父类,所以“animal”的“super”指向“object”。(每个构造器里面都含有隐式的“this”,“super”,其中“this”指向本地)。
9、然后调用“test”测试类。输出语句。
10、这样就完成了一个简单的多态例子。当然也可以添加其他的方法来使程序更加丰富。