方法的重载(overloading)与重写(overriding) :方法名,参数相同形成重写,重写的方法不能降低原方法的"可见度",也不能改变原方法的返回值类型。方法名相同,参数不同(个数、类型)形成重载,重载的方法可看成一个全新的方法,与原方法相比它可以有不同的"可见度"和“返回值类型”。如下例:class A {
 protected int method1(int a, int b) { return 0; }
}
public class B extends A{ 
 public int method1(int a, int b) { return 0; } //正确,重写父类方法,可以扩大访问权限
 //private int method1(int a, int b) { return 0; } //错误,重写父类方法,不能降低了访问权限
 //private long method1(int a, int b) { return 0; } //错误,重写父类方法,不能改变返回值类型
 public short method1(int a, long b) { return 0; }//正确,重载自身的方法,可以有不同的访问权限和返回值类型
 private int method1(int a, long b) { return 0; }//正确,重载自身的方法,可以有不同的访问权限和返回值类型
}如果是这样呢?
class A {
 protected int method1(int a, int b) { return 0; }
}public class B extends A{ 
 public int method1(int a, long b) { return 0; } 
}请问B中的方法可不可行,怎么理解?

解决方案 »

  1.   

    B 没有重写了 A 中的method1方法 虽然可见度匹配  但参数类型不匹配
      

  2.   

    我不知道zxlion(豪迈嘻哈) 说的对不对,我的疑问是可不可以把B中的method1方法不当成重写而作为B自己的方法存在呢?
    有人能回答,解释不错的一定给分。
      

  3.   

    package Csdn;
    class A1 {
     protected int method1(int a, int b) { return 0; }
    }class B extends A1{ 
     public int method1(int a, long b) { return 11; } 
    }
    public class Over {
    public static void main(String[] args){
    long a = 1;
    System.out.println("函数重载"+new B().method1(1,a));
    System.out.println("函数重写"+new B().method1(1,1));
    }
    }
    lz class B 的方法是函数重载,可行的
    调用的时候第二个参数用long类型的,就调用了lz重载的方法了 
      

  4.   

    能访问到父类的同名方法的为overload,否则为override
      

  5.   

    我解释一下吧,
    class A {
     protected int method1(int a, int b) { return 0; }
    }public class B extends A{ 
     public int method1(int a, long b) { return 0; } 
    }
    实际上B是overload了A中的method1,不是重写。因为B继承了A中的方法,所以是重载。