Java 私有(private)方法覆盖

标签 java oop

我遇到过这种情况。我们有一个类可以说 Main 有一个私有(private)方法打印。还有另一个类 Main1,它扩展了 Main 类并重新定义了 print 方法。由于 main1 是 Main1 类的一个对象,我希望调用 main1 打印方法...

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");
    }
}

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

最佳答案

答案并不难:

  • main1类型变量是 Main (不是 Main1 )
  • 所以你只能调用该类型的方法
  • 唯一可能的方法叫做print接受 List<String>Main是私有(private)的
  • 调用代码在类中 Main所以它可以调用该类中的私有(private)方法

因此Main.print(List<String>)将被调用。

请注意,更改 main1 的类型至 Main1将导致其他 print(List<String>)方法被调用。

关于Java 私有(private)方法覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7551828/

相关文章:

java - JTextPane 中的 Swingx 搜索

php - PDO fatal error : Call to a member function prepare() on a non-object

实现数据类型的 Pythonic 方式(Python 2.7)

java - 使用名称创建 bean 时出错。结合 bean 验证和基于 Spring 的验证

java - 从 Java 创建 HTML 电子邮件

oop - Fortran 构造函数返回指向已分配对象的指针

vb.net - 声明共享 MustOverride

c++ - 如何让一个成员对象通知它的容器对象?

java - 用于模板化链接的 Spring Data Rest 覆盖 Controller

java - Eclipse : getOuterType()? 生成的 equals()