Java面试之方法的覆写与重载的区别

一、覆写

  1. 方法的覆写可以总结成容易记忆的口诀:“一大两小两同”。
    (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 关键字。

二、重载

  1. 重载的方法必须和以前方法的方法名一致。
  2. 重载的方法的返回值类型和以前的方法的返回值类型可以一样,可以不一样,不能以此作为重载的依据。
  3. 重载方法的参数类型、参数顺序或参数个数必须和以前方法的不一样。
    补充:方法签名=方法名+参数列表
    ex:
现在有一个方法:public static int info(int x,double y),下面那个方法是对本方法的正确重载?
答: public static int info(int x,int y);(答案其一)//方法名必须相同,此处为参数类型不同
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章