Java基础篇---------方法的重载

上一章讲到了方法的重写,重写是指子类重写编写从父类中继承下来的方法。通过这种形式将共性转换成特性,将父类的共性方法修改成适合子类使用的特有方法。

这一章讲方法的重载,重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。

了解了重载的定义,我想问的是,为什么要有重载?

        String s1 = new String();
        String s2 = new String("overloading");
        String s3 = new String(new char[]{'a','b','c','d','e','f'},1,2);
        System.out.println(s1);//内容为空
        System.out.println(s2);//overloading
        System.out.println(s3);//bc

相信部分人通过上面两行代码就已经猜测到了,下面我通过上面的实例详细的讲解一下重载的用途。 

public String() {
        this.value = new char[0];
    }
public String(String original) {
        this.value = original.value;
        this.hash = original.hash;
    }
public String(char value[], int offset, int count) {
        if (offset < 0) {
            throw new StringIndexOutOfBoundsException(offset);
        }
        if (count < 0) {
            throw new StringIndexOutOfBoundsException(count);
        }
        // Note: offset or count might be near -1>>>1.
        if (offset > value.length - count) {
            throw new StringIndexOutOfBoundsException(offset + count);
        }
        this.value = Arrays.copyOfRange(value, offset, offset+count);
    }

上面的三个方法是String类的部分构造函数源码,对应生成三个String类实例的时候所调用的三个不同的构造函数。 

String s1 = new String();这行代码所调用的是第一个构造函数,将一个长度为0的char数组赋给value。

String s2 = new String("overloading");这行代码调用的是第二个构造函数,将输入的字符串的值和hash值赋给相应的变量。

String s3 = new String(new char[]{'a','b','c','d','e','f'},1,2);这行代码调用的是第三个构造函数,截取从下标为1开始,总量为2的元素,也就是b和c,将b、c组成新的char数组赋给value变量。

这三行类似的代码却实现了完全不同的功能。撰写重载方法的时候是比较痛苦的,且要遵循一定的规范。但是使用起来非常的方便,因为只需要一种调用方式就可以实现不同的功能。这就是方法重载的好处也就是我们为什么要使用重载。

重载的规则:

 

重载和重写的区别: 

  • 被重载的方法必须改变参数列表(参数个数或类型不一样);
  • 被重载的方法可以改变返回类型;
  • 被重载的方法可以改变访问修饰符;
  • 被重载的方法可以声明新的或更广的检查异常;
  • 方法能够在同一个类中或者在一个子类中被重载。
  • 无法以返回值类型作为重载函数的区分标准。 
区别点重载方法重写方法
参数列表必须修改一定不能修改
返回类型可以修改一定不能修改
异常可以修改可以减少或删除,一定不能抛出新的或者更广的异常
访问可以修改一定不能做更严格的限制(可以降低限制)

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值