前两种特性都好理解,大部分人都知道他的好处;但是对于多态性,很多人不太清楚。为什么要有多态性,多态性的好处是什么?下面通过一个例子来说明多态性的好处。
package com.winson.oop;
public class AnimalTest {
public static void main(String[] args) {
AnimalTest test = new AnimalTest();
test.func(new Dog());
System.out.println("--------------------------------------");
test.func(new Cat());
}
public void func(Animal animal) {
animal.eat();
animal.shout();
}
}
class Animal {
public void eat() {
System.out.println("动物:进食");
}
public void shout() {
System.out.println("动物:叫");
}
}
class Dog extends Animal {
@Override
public void eat() {
System.out.println("狗:吃肉");
}
@Override
public void shout() {
System.out.println("狗:汪!汪!汪!");
}
}
class Cat extends Animal {
@Override
public void eat() {
System.out.println("猫:吃鱼");
}
@Override
public void shout() {
System.out.println("猫:喵!喵!喵!");
}
}
运行结果:
狗:吃肉
狗:汪!汪!汪!
--------------------------------------
猫:吃鱼
猫:喵!喵!喵!
之前学习JAVA的时候,一直没明白这句话的意思,通过内存分析,我们就可以理解了;
Animal animal = new Dog();
animal变量存在栈中,对象新建在堆中,栈中就是父类,堆中存的就是子类的对象,因为父类是引用类型,所以父类引用子类的方法;
原文:https://www.cnblogs.com/elnimo/p/13226277.html