Java私有方法覆盖

Ank*_*sal 3 java oop

我遇到了这种情况.我们有一个类让我们说主要有私人方法打印.另一个类Main1扩展了Main类并重新定义了print方法.由于main1是Main1类的对象,我希望调用main1 print方法...

public class Main {
    public static void main(String[] args) {
       Main main1 = new Main1();
       List<String> list = new ArrayList<String>();
       main1.print(list);
    }

    private void print(List<String> string) {
       System.out.println("main");
    }

}

class Main1 extends Main {
    public void print(List<String> string) {
       System.out.println("main1");
    }
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,当我们运行程序时,它会打印"main".它真的让我感到困惑,因为该方法是私有的,甚至不是Main1类的一部分.

Joa*_*uer 13

答案并不太难:

  • 类型的的main1变量Main( Main1)
  • 所以你只能调用那种类型的方法
  • 唯一可能print接受List<String>on的方法Main是私有方法
  • 调用代码在类中,Main因此它可以调用该类中的私有方法

因此Main.print(List<String>)将被称为.

请注意,更改main1to 的类型Main1将导致调用另一个 print(List<String>)方法.