1.多态:一个对象具备多种形态。(父类的引用类型变量指向了子类的对象).
2.多态的前提:必须存在继承或者实现 关系。
3.多态要注意 的细节:
1. 多态情况下,子父类存在同名的成员变量时,访问的是父类的成员变量。
2. 多态情况下,子父类存在同名的非静态的成员函数时,访问的是子类的成员函数。
3. 多态情况下,子父类存在同名的静态的成员函数时,访问的是父类的成员函数。
4. 多态情况下,不能访问子类特有的成员。
总结:多态情况下,子父类存在同名的成员时,访问的都是父类的成员,除了在同名非静态函数时才是访问子类的。
最重要的用法就是实现与父类相同的非静态方法,从而实现多态.
5------多态的应用:
1. 多态用于形参类型的时候,可以接收更多类型的数据 。
2. 多态用于返回值类型的时候,可以返回更多类型的数据。
1 /* 2 需求1: 定义一个函数可以接收任意类型的图形对象,并且打印图形面积与周长。 3 */ 4 5 //图形类 6 abstract class MyShape{ 7 8 public abstract void getArea(); 9 10 public abstract void getLength(); 11 } 12 13 14 15 class Circle extends MyShape{ 16 17 public static final double PI = 3.14; 18 19 double r; 20 21 public Circle(double r){ 22 this.r =r ; 23 } 24 25 public void getArea(){ 26 System.out.println("圆形的面积:"+ PI*r*r); 27 } 28 29 public void getLength(){ 30 System.out.println("圆形的周长:"+ 2*PI*r); 31 } 32 } 33 34 35 class Rect extends MyShape{ 36 37 int width; 38 39 int height; 40 41 public Rect(int width , int height){ 42 this.width = width; 43 this.height = height; 44 } 45 46 public void getArea(){ 47 System.out.println("矩形的面积:"+ width*height); 48 } 49 50 public void getLength(){ 51 System.out.println("矩形的周长:"+ 2*(width+height)); 52 } 53 } 54 55 56 57 class Demo12 { 58 59 public static void main(String[] args) 60 { 61 /* 62 //System.out.println("Hello World!"); 63 Circle c = new Circle(4.0); 64 print(c); 65 66 Rect r = new Rect(3,4); 67 print(r); 68 */ 69 70 MyShape m = getShape(0); //调用了使用多态的方法,定义的变量类型要与返回值类型一致。 71 m.getArea(); 72 m.getLength(); 73 74 75 } 76 77 78 //需求1: 定义一个函数可以接收任意类型的图形对象,并且打印图形面积与周长。 79 public static void print(MyShape s){ // MyShpe s = new Circle(4.0); 80 s.getArea(); 81 s.getLength(); 82 } 83 84 85 // 需求2: 定义一个函数可以返回任意类型的图形对象。 86 public static MyShape getShape(int i){ 87 if (i==0){ 88 return new Circle(4.0); 89 }else{ 90 return new Rect(3,4); 91 } 92 } 93 94 95 }
原文:http://www.cnblogs.com/bequt/p/5027260.html