------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
在我们学习的过程中,通常我们容易被重载和重写这两个概念感到混乱,这里简单的记录一下。
重载
如果同一个类中包含了两个或两个以上方法名相同,但是形参列表不同的方法,这就是方法重载。所以判断方法重载要求是同一个类中方法名相同,参数列表不同。至于方法的返回值类型、修饰符等,与方法重载没有关系。
适用情况:
就是当方法的功能相同,但是参与运算的未知内容不同。那么这时就定义一个函数名称以表示其功能,方便阅读,而通过参数列表的不同来区分多个同名函数。
重载代码实例:
public class Overload {
//下面定义了几个test方法,但方法的形参列表不同
//但是系统可以区分,这就叫方法重载
public void test(){
System.out.println("无参数的test方法");
}
//下面两个方法,虽然参数名相同但是顺序不同,这也是列表不同
public void test(String name,int age){
System.out.println("有参数的方法,"+name+":"+age);
}
public void test(int age,String name){
}
//下面这个重载方法里面包含了长度可变的参数,另外如果参数列表中
//还有其他的参数,那么可变长度的参数放在末尾
public void test(int age,String... names){
}
}
重写
重写是出现在子类与父类的继承中的。在Java中,子类可以继承父类中的方法,而不需要重新编写相同的方法。但是当需要在子类中需要对某个父类的方法内容进行重新定义,从而更符合子类的需求时,这个方法重定义的过程就叫方法重写(方法覆盖)。
在子类和父类中,如果某一个方法具有相同的方法名、返回值类型以及参数列表,那么子类的方法将覆盖父类的方法。但是如果需要在子类中引用父类原有的方法可以使用super关键字实现。另外子类函数的修饰符的权限要不小于父类的函数。
小代码实例:
public class Override {
public static void main(String[] args) {
Animal a = new Animal();
Dog d = new Dog();
a.run();
d.run();
d.bark();
}
}
//定义Animal类
class Animal{
public void run(){
System.out.println("动物可以跑!");
}
}
class Dog extends Animal{
//重写run方法
public void run(){
super.run();
System.out.println("狗会跑和走!");
}
//定义一个叫的方法
public void bark(){
//因为父类中没有bark方法,所以这里不能
//用super调用父类方法
System.out.println("狗还会吠呢");
}
}
总结
所以说:重载与重写就分别是Java在一个类里和在子父类里的多态性的体现。前者增强了类中方法的可复用性,即一个类里有多个方法名相同但是参数列表不同,返回值类型不一样的方法,简化了代码的编写。后者我觉得就是细化了父类中该方法的功能,使得该方法更能达到继承者的使用要求,只是进行了适当的改造,但是功能上还是与被重写的父类方法是相同的。