一、多态
多态指的是同一个方法调用,由于对象不同可能会有不同的行为。现实生活中,同一个方法,具体实现会完全不同。 比如:同样是调用人的“休息”方法,张三是睡觉,李四是旅游,同样是调用人“吃饭”的方法,中国人用筷子吃饭,英国人用刀叉吃饭,印度人用手吃饭。
【注意】 1. 多态是方法的多态,不是属性的多态(多态与属性无关)。
2. 多态的存在要有3个必要条件:继承,方法重写,父类引用指向子类对象。
3. 父类引用指向子类对象后,用该父类引用调用子类重写的方法,此时多态就出现了。
代码示例:
1 class Animal //父类 2 { 3 public void shout(){ 4 System.out.println("叫声"); 5 } 6 } 7 8 class cat extends Animal //条件1、此时体现继承 9 { 10 public void shout(){ //条件2、此时体现重写 11 System.out.println("喵喵喵喵。。。"); 12 } 13 } 14 15 class dog extends Animal 16 { 17 public void shout(){ 18 System.out.println("汪汪汪汪。。。"); 19 20 } 21 } 22 23 24 public class Test_1203_01 25 { 26 public static void main(String[] args) 27 { 28 animalShout(new dog()); 29 animalShout(new cat()); 30 31 32 } 33 34 static void animalShout(Animal a){//多态,不管传来什么动物,都会找到合适的方法 35 a.shout(); //条件3、父类引用指向子类对象 36 37 } 38 39 /* 如果没有多态,我们这里需要写很多重载的方法。 40 * 每增加一种动物,就需要重载一种动物的喊叫方法。非常麻烦。 41 static void animalShout(Dog d) { 42 d.shout(); 43 } 44 static void animalShout(Cat c) { 45 c.shout(); 46 }*/ 47 }
二、对象的转型
向上转型: 子类对象转父类。自动转型
向下转型:父类转子类,需要强制转型 ,必须将引用变量转成真实的子类类型(运行时类型),否则会出现类型转换异常ClassCastException