软件构造(三)重写与重载

在java当中对于方法有重写和重载两种操作,是Java多态性的重要体现,两者之间一不小心可能就会弄混。在此做一下区分。

重写

重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。也就是说在一个父类当中已经存在一个方法并且在子类中可以访问得到(不能由private修饰),在子类中用相同的方法名和形参列表,可以把他的代码块加以修改,在new一个父类的时候,调用该方法时使用的是父类中该方法的代码块;而new一个子类的时候,调用该方法时使用的是子类中重写的该方法的代码块。

重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。

重写后方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。因为子类throw的异常会传递给父类,如果比父类处理的异常范围还要大的话就会出现问题。
返回类型与被重写方法的返回类型可以不相同,但是必须是父类返回值的派生类。
声明为final的方法不可以被重写;声明为static的方法也不能被重写,但可以被重新声明,不要把它和重写混为一谈,可以看作是不同的两个方法了。
如果在子类中想要调用父类中被重写过的方法,就要用到super关键字。

重载

重载是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同,即返回值对于重载没有影响。
其实从这一点就可以很简单区分二者,重写发生在子类与父类之间;而重载发生在一个类的内部。重写的形参列表必须完全相同,而重载则绝对不能相同。
每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。
最常用的地方就是构造器的重载。
值得注意的是,形参列表不同于每个形参的名称无关,比如(int a, float b)就和(int c, float d)实际上是相同的,如果这样写就出错了。除此之外,形参列表的顺序不同也可以算作不同,比如(int a, float b)和(float b,int a)就是不同的,其实也很好理解,一个被重载的方法在被调用时,你需要让编译器知道你要是用的是具体哪一个方法,而你传递给方法的参数就是进行判断的唯一标准,能让编译器精准判断出是哪一个,那么就没有问题。可以简单的把重载方法形参列表除去形参名后剩余的变量类型按顺序写出来,只要相互之间不完全相同即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值