黑马程序员技术交流社区

标题: Java的重载(Overload)与重写(Override) [打印本页]

作者: 黄新宇    时间: 2015-7-23 08:14
标题: Java的重载(Overload)与重写(Override)
重载与重写之间的差别
区别点
重载方法
重写方法
参数列表
必须修改
一定不能修改
返回类型
可以修改
一定不能修改
异常
可以修改
可以减少或删除,一定不能抛出新的或者更广的异常
访问
可以修改
一定不能做更严格的限制(可以降低限制)
重载(Overload)
每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。
只能重载构造函数
规则
  1. /**
  2. * Overloading(重载,过载)
  3. * 方法名相同,参数类型不同或者参数类型顺序不同
  4. * 返回值,访问修饰符,异常可以不一样
  5. * @author fatkun
  6. *
  7. */
  8. public class Overloading {

  9. public int test(){
  10.                 System.out.println("test1");
  11.                 return 1;
  12.         }

  13.         public void test(int a){
  14.                 System.out.println("test2");
  15.         }       

  16.         //以下两个参数类型顺序不同
  17.         public String test(int a,String s){
  18.                 System.out.println("test3");
  19.                 return "returntest3";
  20.         }       

  21.         public String test(String s,int a){
  22.                 System.out.println("test4");
  23.                 return "returntest4";
  24.         }       

  25.         public static void main(String[] args){
  26.                 Overloading o = new Overloading();
  27.                 System.out.println(o.test());
  28.                 o.test(1);
  29.                 System.out.println(o.test(1,"test3"));
  30.                 System.out.println(o.test("test4",1));
  31.         }
复制代码
重写(Override)
能够在需要新的子类特有行为时重新在子类中定义方法。
规则
  1. /**
  2. * Overriding(重写,覆盖)
  3. * 重写是子类继承父类对父类的方法进行修改。方法名,参数,返回值必须一样。
  4. * 访问级别的限制性和异常不能比被重写的方法强
  5. * @author fatkun
  6. *
  7. */
  8. class TestClass {
  9.         public void test(){
  10.                 System.out.println("这是TestClass的test方法");
  11.         }
  12. }

  13. public class Overriding extends TestClass {

  14.         public static void main(String[] args) {
  15.                 new Overriding().test();
  16.         }

  17.         @Override
  18.         public void test() {
  19.                 System.out.println("这是Overriding的test方法,重写了TestClass中的方法");
  20.         }
  21. }
复制代码

调用
重载方法:
参数类型决定选择哪个重载版本(根据声明的参数类型),这发生在编译时。被调用的实际方法仍是发生在运行时期的虚拟方法调用。但是编译器已经知道所调用的方法的签名。因此,在运行时期,参数匹配已经明确,只是还不知道该方法所在的实际类。
重写方法:
对象类型(即:堆上实际实例的类型决定调用选择哪个方法,这发生在运行时期)





作者: 耀阳圣尊    时间: 2015-7-23 09:08
赞赞
作者: 黄新宇    时间: 2015-7-23 11:18
耀阳圣尊 发表于 2015-7-23 09:08
赞赞

谢谢你!




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