多态的定义:
-
指同一个方法的调用,由于对象不同可能会有不同的行为。
-
现实生活中,同一个方法,具体实现会完全不同
对象:人,方法:休息
-
小孩,玩游戏
-
程序员,敲代码
多态的要点:
多态指的是方法的多态而不是属性的多态
必要条件:
-
必须要有继承
-
必须要有方法的重写
-
必须要父类引用指向子类对象
-
父类引用指向子类对象后,用该父类引用调用子类重写的方法,此时多态就出现了。
package cn.Lucifer.oo;
/**
* 测试多态
* @author Lucifer
*/
//写三个类,第一个是Animal
class Animal{
//叫一声的方法
public void shout(){
System.out.println("叫了一声!");
}
}
//第二个类,狗
class Dog extends Animal{
//重写方法
public void shout(){
System.out.println("汪汪汪");
}
//还有一个专属方法
public void seeDoor(){
System.out.println("看门");
}
}
//再写一个类,猫
class Cat extends Animal{
//重写方法
public void shout(){
System.out.println("喵喵喵");
}
}
public class TestPolym {
public static void main(String[] args) {
//创建Animal对象
Animal a = new Animal();
animalCry(a );
}
//为了方便调用写一个方法
static void animalCry(Animal a){
a.shout();
/*
a的类型是Animal
Dog是子类对象,之类对象给了父类引用
父类的类型指向了子类的对象,这时候就发生了多态
传的对象不一样,所以调用的shout方法也不一样,根据实参确当
存在目的为了少些重载
下面加子类可以方便调用
*/
Dog d = new Dog(); //把Dog d 改为Animal d没有问题,到调用方法的时候还是运行Dog的方法
// animalCry(d);
animalCry(new Cat());
}
}