一、覆写
- 方法的覆写可以总结成容易记忆的口诀:“一大两小两同”。
(1)一大:子类的方法访问权限控制符只能相同或变大。
(2)两小:抛出异常和返回值只能变小,能够转型成父类对象。子类的返回值、抛出异常类型必须与父类的返回值、抛出异常类型存在继承关系。
(3)两同:方法名和参数必须完全相同。
覆写示例代码如下:
class Father {
protected Number doSomething(int a, Integer b, Object c) throws SQLException {
System.out.println("Father's doSomething");
return new Integer(7);
}
}
class Son extends Father{
/**
* 1. 权限扩大,由protected到public(一大)
* 2. 返回值是父类的Number的子类(两小)
* 3. 抛出异常是SQLException的子类
* 4. 方法名必须严格一致(两同)
* 5. 参数类型与个数必须严格一致
* 6. 必须加@Override
*/
@Override
public Integer doSomething(int a, Integer b, Object c) throws SQLClientInfoException {
if(a == 0){
throw new SQLClientInfoException();
}
return new Integer(17);
}
}
说明: 覆写只能针对非静态、非 final、非构造方法。由于静态方法属于类,如果父类 和子类存在同名静态方法,那么两者都可以被正常调用。如果方法有 final 修饰 ,则 表示此方法不可被覆写。 如果想在子类覆写的方法中调用父类方法 , 则可以使用 super 关键字。
二、重载
- 重载的方法必须和以前方法的方法名一致。
- 重载的方法的返回值类型和以前的方法的返回值类型可以一样,可以不一样,不能以此作为重载的依据。
- 重载方法的参数类型、参数顺序或参数个数必须和以前方法的不一样。
补充:方法签名=方法名+参数列表
ex:
现在有一个方法:public static int info(int x,double y),下面那个方法是对本方法的正确重载?
答: public static int info(int x,int y);(答案其一)//方法名必须相同,此处为参数类型不同