java中方法重载与重写的区别,联系是什么啊?请举例好吗?

如题所述

public class Father
{
public void speak()
{
System.out.println("Father");
}
}
public class Son extends Father
{
public void speak()
{
System.out.println("son");
}
}
这也叫做多太性,重写方法只能存在于具有继承关系中,重写方法只能重写父类非私有的方法,
当上例中 Father类 speak()方法被private时,Son类不能重写 Father类 speak()方法,此时Son类 speak()方法相当与在Son类中定义的一个speak()方法.
Father类 speak()方法一但被final时,无论该方法被public,protected及默认所修饰时,Son类根本不能重写 Father类 speak()方法,试图编译代码时,编译器会报错.例:
public class Father
{
fianl public void speak()
{
System.out.println("Father");
}
}
public class Son extends Father
{
public void speak()
{
System.out.println("son");
}
}//编译器会报错.

Father类 speak()方法被时默认修饰时,只能在同一包中,被其子类被重些,如果不在同一包则不能重写.
Father类 speak()方法被时protoeted时,不仅在同一包中,被其子类被重些,还可以不同包的子类重写.
重写方法的规则:
参数列表必须完全与被重写的方法的相同,否则不能称其为重写而是重载.
返回的类型必须一直与被重写的方法的返回类型相同,否则不能称其为重写而是重载.
访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private)
重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常.例如,
父类的一个方法申明了一个检查异常IOException,在重写这个方法是就不能抛出Exception,只能抛出IOException的子类异常,可以抛出非检查异常.
  而重载的规则:
  必须具有不同的参数列表;
  可以有不同的返回类型,只要参数列表不同就可以了;
  可以有不同的访问修饰符;
  可以抛出不同的异常;
重写和重载的区别在于:重写多态性起作用,对调用被重载过的方法可以大大减少代码的输入量,同一个方法名只要往里面传递不同的参数就可以拥有不同的功能或返回值.

  用好重写和重载可以设计一个结构清晰而简洁的类,可以说重写和重载在编写代码过程中的作用非同一般.
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-11-04
方法重写要求参数签名必须一致,而重载要求参数签名必须不一致。
方法重写要求返回类型必须一致,而重载对此不做限制。
方法重写只能用于子类重写父类的方法,重载可用于同一个类的所有方法。class father
{
public void move()
{
System.out.println("走");
}
}
class child extends father //child类继承father类
{
public void move() //方法重写
{
System.out.println("跑");
}
public void move(String move) //方法重载
{
System.out.println(move);
}
}本回答被网友采纳
第2个回答  2013-11-04
重载是同名方法,不同参数类型,不同参数个数。重写是同一个方法,参数类型,个数一样,方法体不一样
相似回答