多态指的是同一个方法调用,由于对象不同可能会有不同的行为,现实生活中,同一方法,具体实现会完全不同.
1.多态是方法的多态,不是属性的多态(多态与属性无关).
2.多态的存在要有3个必要条件:继承,方法重写,父类引用指向子类对象.
3.父类引用指向子类对象以后,用该父类引用调用子类重写的方法,此时多态就出现了.
多态的实例:
package test;
/**
* 测试多态
* @author mac
*
*/
public class Polym {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Animal a=new Animal();
shoutCry(a);
Animal b=new Dog();//向上自动转型
Animal c=new Cat();
shoutCry(b);//对于狗就汪汪汪
shoutCry(c);//对于猫就喵喵喵
//b.seedoor();
Dog d=(Dog)b;//强制向下转型
d.seedoor();
//Dog e=(Dog)c; 编译可以通过,(java.lang.ClassCastException)类型转化错误
//e.seedoor(); 运行会发生错误
}
static void shoutCry(Animal a){//同一方法,对象不同,具体实现会完全不同
a.shout();
}
}
class Animal{
public void shout(){
System.out.print("叫了一声.\n");
}
}
class Dog extends Animal{
public void shout(){
System.out.print("汪汪汪.\n");
}
public void seedoor(){
System.out.print("看门...\n");
}
}
class Cat extends Animal{
public void shout(){
System.out.print("喵喵喵.\n");
}
}