Java学习笔记:方法的重载与多态

方法的重载

方法的重载就是在同一个类中允许一个以上的同名方法,只要这些方法的参数个数或类型不同即可。实例如下:

public void draw(Square s) {  }//绘制正方形的方法
public void draw(Circular c) {  }//绘制圆形的方法
public void draw(Square s, Circular c){  }//同时绘制正方形和圆形的方法

上述例子方法名称相同,但1与2方法参数类型不同,2与3方法参数个数不同,此即为方法的重载。

public int add(int a, int b){    //整形参数a与b相加返回整形值
    return a + b;
}
public double add(int a, int b){ //整形参数a与b相加返回双精度浮点型值
    return a + b;
}

上述两种方法不是方法的重载。

注:虽然在方法重载中可以使两个方法的返回类型不同,但只有返回类型不同并不足以区分两个方法的重载,还需要通过参数的个数以及返回参数的类型来设置。

另:不定长参数方法的语法如下:

返回值 方法名(参数数据类型...参数名称)
public int add(int ... a){  }

多态

利用多态可以使程序具有良好的扩展性,并可以对所有类的对象进行通用的处理

public void draw(Square s) {  }//绘制正方形的方法
public void draw(Circular c) {  }//绘制圆形的方法

由方法重载的例子可以知道,这种写法如果传入正方形就可以绘制正方形,如果传入圆形就可以绘制圆形。但是这种写法有一个问题,正方形和圆形都是图形,这场景细分的重载方式不仅增加了代码量,还降低了“易用度”。为了解决这个问题,我们可以根据“向上转型”原则使每个继承图形类的对象作为draw()方法的参数,然后在draw()方法中使用 instanceof 关键字来限定一些条件,这样就可以实现根据不同图形类对象绘制相应的图形。这样处理能够很好的解决代码冗余的问题,同时程序也易于维护。具体例子如下:

class Shape{  }
class Square extends Shape{  }
class Circular extends Shape{  }

public class Test {
    public static void draw(Shape s) {
        if(s instanceof Square) {
            System.out.println("绘制正方形");
        }else if(s instanceof Circular) {
            System.out.println("绘制圆形");
        }else {
            System.out.println("绘制父类图形");
        }
    }

    public static void main(String[] args) {
        draw(new Shape());
        draw(new Square());
        draw(new Circular());
    }
}

运行结果如下:

绘制父类图形
绘制正方形
绘制圆形

从上述例子可以看出,定义一个参数类型是父类的方法,利用向上转型传入参数,并使用 instanceof 关键字来增加一些限定条件,以不同类对象为参数调用draw()方法,可以处理不同的图形绘制问题。使用多态节省了开发和维护的时间,因为无须在所有的子类中定义执行相同功能的方法,避免了大量重复代码的编写,而且如果功能需要发生变化,仅仅需要改动一个方法即可。

部分摘抄自 明日科技《Java从入门到精通》

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值