17. Override和Overload的含义去区别

2016/9/29 12:50 下午 posted in  Java comments

Override
覆盖(又称重写)指重写父类的同名方法,参数,名称,返回值都必须一样,子类不能降低父类方法的可见性(否则无法实现多态)

Overload
重载,在同一个类中,使用同名方法,但方法参数必须有不同,个数或类型

class Father{
    public void show(){
        System.out.println("Father");
    }
}

class Sub extends Father{
    
    public void show(){
        System.out.println("Sub");
    }
    
    public void show(String msg){
        System.out.println("reload:" + msg);
    }
    
    public void show(String msg, String time){
        System.out.println("reload:" + msg + " time:" + time);
    }
    
    public void show(int number){
        System.out.println("reload:" + number);
    }
}

若子类尝试降覆盖方法的可见性,编译会报错。

class Father{
    public void show(){
        System.out.println("Father");
    }
}

class Sub extends Father{
    
    private void show(){
        System.out.println("Sub");
    }
    
    public void show(String msg){
        System.out.println("reload:" + msg);
    }
    
    public void show(String msg, String time){
        System.out.println("reload:" + msg + " time:" + time);
    }
    
    public void show(int number){
        System.out.println("reload:" + number);
    }
}

输出

Untitled.java:9: 错误: Sub中的show()无法覆盖Father中的show()
    private void show(){
                 ^
  正在尝试分配更低的访问权限; 以前为public
1 个错误