编号:1

class Ajay {
    private void display() {
        System.out.println("Ajay");
    }
    public static void main(String ...strings ){
        Ajay r=new Ravi();
        r.display();
    }
}

class Ravi extends Ajay{
    public void display() {
        System.out.println("ravi");
    }
}


编号:2

class Ravi {
    private void display() {
        System.out.println("ravi");
        }
    }

public class Ajay extends Ravi{
    public void display() {
        System.out.println("ajay");
    }
    public static void main(String ...strings ){
    Ravi r=new Ajay();
        r.display();
    }
}


我对以上两个代码有疑问。
代码1执行时没有任何错误,而代码2则抛出错误,例如方法不可见。
此错误的原因是什么?

最佳答案

在第二个示例中,您尝试对类型为display()的变量调用方法RaviRavi没有可从此位置(即在display()内部)访问的方法Ajay

但是,在第一个示例中,您从display()内部调用Ajay的私有Ajay方法。注意,调用private方法不会使用运行时多态!要调用的确切代码在编译时确定!

08-16 13:55