一、基础概念
多态:
重点是对象的多态性。某一事物的多种体现形态。
多态的作用:
1.提高了代码的扩展性,后期出现的功能,可以被之前的程序所执行。
2.不能使用子类特有的功能。只能使用覆盖父类的功能。
多态的前提:
1.必须要有继承关系或者实现关系。
2.通常对方法进行重写、覆盖。
3.父类或者接口要引用指向子类对象。
多态向上转型:
1.提高程序的扩展性,隐藏了具体子类型
2.只能使用父类中的功能,不能使用子类特有的功能。功能被限定了。
多态向下转型:
1.可以使用子类型的特有功能。
2.必须面对具体的子类型。
3.为了避免运行时出现ClassCastException 问题,需要用关键字instanceof来进行判断。
注意:
多态至始至终都是子类对象在做着类型的变化。
二、代码实例
1 //父类Animal 2 abstract class Animal 3 { 4 abstract void eat(); 5 abstract void sleep(); 6 } 7 8 //Dog类继承Animal类 9 class Dog extends Animal 10 { 11 /** 12 将Animal类中的方法重写 13 */ 14 void eat() 15 { 16 System.out.println("dog eat 吃骨头"); 17 } 18 void sleep() 19 { 20 System.out.println("dog sleep ....."); 21 } 22 23 /** 24 自己特有的方法 25 */ 26 void say() 27 { 28 System.out.println("dog say ....."); 29 } 30 } 31 32 //Cat类继承Animal类 33 class Cat extends Animal 34 { 35 /** 36 将Animal类中的方法重写 37 */ 38 void eat() 39 { 40 System.out.println("Cat eat 吃鱼"); 41 } 42 void sleep() 43 { 44 System.out.println("Cat sleep ....."); 45 } 46 } 47 48 class DuoTaiDemo 49 { 50 //封装Dog类的方法 51 public static void method(Dog d) 52 { 53 d.eat(); 54 d.sleep(); 55 d.say(); 56 } 57 58 //封装Cat类的方法 59 public static void method(Cat c) 60 { 61 c.eat(); 62 c.sleep(); 63 } 64 65 //封装父类Animal的方法 66 public static void method(Animal s) 67 { 68 s.eat(); 69 s.sleep(); 70 } 71 72 public static void main(String[] args) 73 { 74 Dog d1 = new Dog(); 75 method(d1); 76 77 Cat c = new Cat(); 78 method(c); 79 80 Animal s = new Dog(); //多态性,向上转型,将Dog提升为Animal。 81 method(s); //只能使用覆盖了父类Animal的eat方法和sleep方法。不能使用Dog类中自己的say方法。 82 83 Animal a = new Cat(); //多态性,向上转型。 84 method(a); 85 86 /** 87 向下转型,为了避免运行时出现ClassCastException 问题, 88 需要用关键字instanceof来进行判断。 89 */ 90 if( !(s instanceof Dog)) 91 { 92 System.out.println("类型不匹配"); 93 return ; 94 } 95 Dog d2 = (Dog)s; //多态性,向下转型。 96 d2.eat(); 97 d2.sleep(); 98 d2.say(); 99 } 100 }
三、运行代码