Java基础:第三十九讲 多态

本文介绍了面向对象编程中多态的概念及其两种主要形式:同一类中功能的不同实现方式及不同子类对相同行为的不同实现。并通过图形类及其子类的具体实例进行详细说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单的讲,多态就是同一种功能具有多种实现方式。

多态有两种类型:同一个类中某个行为的多种实现方式;不同子类对相同行为的不同的实现方式。

1、同一个类中某个行为的多种实现方式

在实现某个功能的时候可以采用不同的方式,通常采用相同的名字,而参数不同。例如要初始化一个矩形,可以给出左上角的坐标和矩形的长宽,也可以给出左上角的坐标和右下角的坐标。

public class Rectangle{

      private int left;  // 左上角横坐标

     private int top; //左上角纵坐标

     private int width; // 宽

     private int height; // 高

     public void initiate(int left,int top,int width,int height){

         this.top = top;

        this.left = left;

        this.width = width;

        this.height = height;

     }

     public void initiate(Point lefttop,Point rightbottom){

         top = lefttop.getY();

        left = lefttop.getX();

       width  = rightbottom.getX() - lefttop.getX();

      height = rightbottom.getY() - lefttop.getY();

     }

}

另外,可以考虑构造方法。构造方法用于构造对象,有各种不同的构造对象的方法,所以会有多种构造方法,多个构造方法都是用于构造对象,这就是多态。

2、不同子类有不同的实现方式

在上一讲中描述的图形类的画图方法以及交通工具的移动方法都是多态的典型例子。

对于图形类,具有画图的方法,但是三角形、矩形和圆的画法不同,所以会有不同的实现方式。这种多态与上面介绍同一个类中某个功能的多个实现方式不同,前面是同类的某个功能的不同实现方式,而现在是不同子类的不同实现方式。下面以计算面积为例介绍。

public abstract class Graphics{

   public abstract  void print(); // 画图的方法

   public abstract float area(); //计算面积

}

public class Circle extends Graphics{

     private int r; //

     private int left; // 圆心的左上角横坐标

     private int top; // 圆心的左上角纵坐标

     public void print(){

         ...

     }

     public float area(){

        return 3.1415*r*r;

     }

}
 

public class Rectangle extends Graphics{

     private int left; // 圆心的左上角横坐标

     private int top; // 圆心的左上角纵坐标

     private int width; // 宽

     private int height; // 高

     public void print(){

         ...

     }

     public float area(){

        return height*width;

     }

}

3、多态性的应用

对于上面第一种形式的多态,方法的调用通过对象名字,要调用哪个方法就写相应的方法名字并提供相应的参数即可。对于第二种形式的多态,如果分别定义子类的对象然后调用相应的方法,与其他普通的方法就没有什么区别了,例如下面的代码:

public static void main(String[] args){

      Circle circle = new Circle(); // 创建圆对象

      circle.setTop(20);   // 此行及以下两行用于初始化

      circle.setLeft(30);

      circle.setR(10);

      System.out.println(circle.area());  //调用计算面积的方法并输出

      Rectangle rectangle = new Rectangle ();

      rectangle .setTop(20);

      rectangle .setLeft(30);

      rectangle .setWidth(10);

      rectangle .setHeight(10);

      System.out.println(rectangle.area());

}

那多态性如何体现呢?请看下次的向上转型和强制类型转换。

李绪成 优快云 Blog: http://blog.youkuaiyun.com/javaeeteacher
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值