一个关于Java方法覆写的小注意点

先看两段代码:

class Person{
    void print(){
        System.out.println("Person -> void print()") ;
    }
    public void fun(){
        this.print() ;
    }
} 

class Student extends Person{
    public void print(){
        System.out.println("Student -> public void print()") ;
    }
}

public class OverrideDemo01{
    public static void main(String args[]){
        new Student().fun() ;
    }
}

上述代码运行结果为

Student -> public void print()

再看下面:

class Person{
    private void print(){
        System.out.println("Person -> void print()") ;
    }
    public void fun(){
        this.print() ;
    }
}

class Student extends Person{
    void print(){
        System.out.println("Student -> public void print()") ;
    }
}

public class OverrideDemo02{
    public static void main(String args[]){
        new Student().fun() ;
    }
}

运行结果为:

Person -> void print()

可以发现,虽然被子类覆写的方法已经拥有比父类更严格的访问权限,但是方法覆写的权限从private扩大为default不能算是方法覆写.