黑马程序员技术交流社区

标题: 重写和重载的区别 [打印本页]

作者: Kaitong    时间: 2014-4-8 13:36
标题: 重写和重载的区别
本帖最后由 Kaitong 于 2014-4-9 17:00 编辑

适用于什么情况调用?哪个好用
作者: luoyilan222    时间: 2014-4-8 13:39
重写是子类与父类,重载是在同一类中相同的方法名更具参数的类型个数来区分
作者: 许庭洲    时间: 2014-4-8 14:44
1.Override是进行基类中函数的重写。Override是面向对象的概念。
2.Overload是面向过程的概念。重载是方法的名称不同。参数或参数类型不同,进行多次重载以适应不同的需要。
作者: 一片白    时间: 2014-4-9 10:38
override->重写(=覆盖)、overload->重载
override是重写(覆盖)了一个方法,以实现不同的功能。一般是用于子类在继承父类时,重写(重新实现)父类中的方法。
重写(覆盖)的规则:
   1、重写方法的参数列表必须完全与被重写的方法的相同,否则不能称其为重写而是重载.
   2、重写方法的访问修饰符一定要大于被重写方法的访问修饰符(public>protected>default>private)。
   3、重写的方法的返回值必须和被重写的方法的返回一致;
   4、重写的方法所抛出的异常必须和被重写方法的所抛出的异常一致,或者是其子类;
   5、被重写的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行重写。
   6、静态方法不能被重写为非静态的方法(会编译出错)。

overload是重载,一般是用于在一个类内实现若干重载的方法,这些方法的名称相同而参数形式不同。
重载的规则:
   1、在使用重载时只能通过相同的方法名、不同的参数形式实现。不同的参数类型可以是不同的参数类型,不同的参数个数,不同的参数顺序(参数类型必须不一样);
   2、不能通过访问权限、返回类型、抛出的异常进行重载;
   3、方法的异常类型和数目不会对重载造成影响;
作者: 袁晓俊    时间: 2014-4-9 14:04
重写的主要优点是能够定义某个子类特有的特征:        如: 
    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");              }                    

文档冲亿季,好礼乐相随mini ipad移动硬盘拍立得百度书包



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




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2