java-多态

一、什么是多态

       多态不但可以改善代码的组织结构和可读性,还能够创建可扩展的程序(即无论在项目最初创建时还是在需要添加新功能时都可以”生长“的程序)。之所以可以进行扩展,是因为在多态中默认忘记了对象类型,比如类Shap,无论是Circle(圆形)、Square(正方形)还是Triangle(三角形)都可以说是一种Shape,也就是继承中常提到的”is-a“关系,此时如果继续添加一个Rhombus(菱形)类仍然满足这种关系,所以当进行向上转型时都可以说是一个Shape类,即忽视了具体类型,多态实例如下:

  1. class Shape{  
  2.    public draw(){}  
  3.    public clear(){}  
  4. }  
  5. class Trangle extends Shape{  
  6.    //重写父类方法  
  7.    public draw(){  
  8.       System.out.print("Draw Trangle");  
  9.    }  
  10.    public clear(){  
  11.      System.out.print("Clear Trangle");  
  12.    }  
  13. }  
  14. class Circle extends Shape{  
  15.    //重写父类方法  
  16.    public draw(){  
  17.      System.out.print("Draw Circle ");  
  18.    }  
  19.    public clear(){  
  20.      System.out.print("Clear Circle ");  
  21.    }  
  22. }  
  23. //可以进行扩展Square、Rhombus……  
  24. public class Test{  
  25.    public static void main(String[] args){  
  26.      Shape[] shape = {new Trangle(),new Circle()};//多态,忽视Trangle和Circle的具体类型而一并看作为Shape类型  
  27.      for(Shape s:shape){  
  28.         s.draw();  
  29.         s.clear();  
  30.      }  
  31.   }  
  32. }  
  33. out:  
  34. Draw Trangle  
  35. Clear Trangle  
  36. Draw Circle  
  37. Clear Circle  

**补充一点**:

      既然有向上转型肯定就有向下转型,但是由于子类的方法不只包含所有的基类方法,还可能拥有基类没有的方法,所以在向下转型时很可能出现丢失方法的情况以致于转型失败,具体实例如下:

[java]   view plain  copy
  1. class Useful{  
  2.    public void f(){}  
  3.    public void g(){}  
  4. }  
  5. class MoreUserful extends Useful{  
  6.    public void f(){}//重写父类方法  
  7.    public void g(){}//重写父类方法  
  8.    public void u(){}//子类包含基类没有的方法  
  9. }  
  10. public class Test{  
  11.    public static void main(String[] args){  
  12.       Useful[] u={new Useful(),new MoreUseful()};  //多态(包含向上转型)  
  13.       u[0].f();  
  14.       u[1].g();  
  15.       //若要通过父类调用子类方法,需要向下转型  
  16.       (MoreUseful)u[0].u();//报错ClassCastException异常  
  17.       (MoreUseful)u[1].u();//向下转型成功!  
  18.    }  
  19. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值