最简单明了的JAVA多态理解
先看一下示例代码
abstract class Animal{
public abstract void shout();
}
首先抽象一个父类并定义一个被继承的方法
public class Dog extends Animal{
public void shout() {
System.out.println("汪");
}
}
public class Cat extends Animal{
public void shout(){
System.out.println("喵");
}
}
接着是两个子类分别继承父类的shout方法
public static void main(String args[]){
Animal cat = new Cat(); //实例化一个cat对象,//注意此处是用的Animal,不是cat
Animal dog = new Dog(); //实例化一个dog对象 //父类引用指向子类对象
animalshout(dog); //把对象作为参数传給下面的animalshout方法
animalshout(cat);
}
public static void animalshout(Animal animal) { //接收对象类型的实参
animal.shout(); //当执行到animalshout(dog)时,这条语句等价于dog.shout();
} //当执行到animalshout(cat)时,这条语句等价于cat.shout();
主函数实例调用运行结果是
汪
喵
其实只是把正常的调用对象方法换了一种更灵活的方式调用,实现了在对应的情况下使用相同的方法调用不同的对象的方法!因此多态的使用必须条件是:
-
继承:在多态中必须存在有继承关系的子类和父类。
-
重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。
-
向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才既能可以调用父类的方法,又能调用子类的方法。(main函数第三,四行)