📜  对Java中派生类方法更严格的访问

📅  最后修改于: 2020-03-23 00:54:55             🧑  作者: Mango

在Java中,当派生类函数将重写基类函数,编译器错误赋予对派生类函数的更多限制访问。 例如,如果在基类中有一个public void foo()函数,并且在派生类中将其重写,则foo()的访问说明符不能是派生类中的public。如果foo()是基类中的私有函数,则对其的访问说明符可以是派生类中的任何内容。
请考虑以下两个程序。程序1编译失败,程序2运行正常。
程序1

// 文件名: Main.java
class Base 
    public void foo() { System.out.println("父类"); }
}
class Derived extends Base {
    // 编译错误
    private void foo() { System.out.println("派生类"); }
}
public class Main {
    public static void main(String args[]) {
        Derived d = new Derived();
        d.foo();
    }
}

程序2

// 文件名: Main.java
class Base {
    private void foo() { System.out.println("父类"); }
}
class Derived extends Base {
    // 成功运行
    public void foo() { System.out.println("派生类"); }
}
public class Main {
    public static void main(String args[]) {
        Derived d = new Derived();
        d.foo();
    }
}

输出:

派生类