方法的重载(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中的方法可不可行,怎么理解?
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中的方法可不可行,怎么理解?
有人能回答,解释不错的一定给分。
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重载的方法了
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中的方法,所以是重载。