overriding VS overload
首先:overriding是子类继承父类的问题,是子类的函数对父类的函数的重新定义,
即父类有个方法 void speak.(){}方法
如果子类也有 void speak (){}方法则,最终运行的是子类的函数。
要注意的是:
1、重写方法的参数列表必须完全与被重写的方法的相同,否则不能称其为重写而是重载.
2、重写方法的访问修饰符一定要大于被重写方法的访问修饰符(public>protected>default>private)。
3、重写的方法的返回值必须和被重写的方法的返回值一致;
4、重写的方法所抛出的异常必须和被重写方法的所抛出的异常一致,或者是其子类;
5、被重写的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行重写。
6、静态方法不能被重写为非静态的方法(会编译出错)。
7、如需父类中原有的方法,可使用super关键字,该关键字引用了当前类的父类。
(父类: void speak.(){int num=1} 子类:void speak.(){int num=2}子类:this.num 父类:super.num)
overload
1、在使用重载时只能通过相同的方法名、不同的参数形式实现。不同的参数类型可以是不同的参数类型,
不同的参数个数,不同的参数顺序(参数类型必须不一样);
2、不能通过访问权限、返回类型、抛出的异常进行重载;
3、方法的异常类型和数目不会对重载造成影响;
例如:
class test1
{
private byte b;
test1()
{
b=1;
b = b += 1;
System.out.println("C.b="+b);
}
test1(byte b)
{
this.b = b;
++b;
System.out.println("D.b="+b);
}
}
class Number1
{
public static void main(String[] args)
{
byte b = 1;
test1 c = new test1();
test1 d = new test1(b);
}
}
|