java - 在没有编译错误的情况下更改对方法的访问

标签 java private public access-modifiers

有人可以演示一个简单程序的示例,在这个示例中,将一个方法的访问权限从私有(private)更改为公共(public),不会导致编译错误,只会导致程序的行为不同吗?

此外,什么时候添加新的私有(private)方法会导致编译错误或导致程序表现不同?

最佳答案

这与继承有关。子类可以拥有与其父类中的私有(private)方法具有相同签名的方法,但不能覆盖它。

public class Scratchpad {
    public static void main(String[] args) {
        new Sub().doSomething();
    }
}

class Super {
    public void doSomething() {
        System.out.println(computeOutput());
    }

    private String computeOutput() {
        return "Foo";
    }
}

class Sub extends Super {
    public String computeOutput() {
        return "Bar";
    }
}

如果你按原样运行它,你会得到 Foo。如果将 Super#computeOutput() 更改为 public,则会得到 Bar。这是因为 Sub#computeOutput() 现在会覆盖 Super#computeOutput()

关于java - 在没有编译错误的情况下更改对方法的访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23016198/

相关文章:

java - 卡夫卡 - 经纪人 : Group coordinator not available

image - 使用 Docker 从私有(private)注册表加载具有依赖项的镜像

facebook - 是否可以创建仅供特定用户使用的私有(private)应用程序?

go - 当编写一个包用作命令时,这是惯用的 : name all identifiers as private or name all identifiers as public?

github,公共(public)或谷歌帐户用户是否可以报告问题?

java - 如何处理java.io.InvalidClassException?

java - JSON 使用 GSON-Library : Error Expected BEGIN_OBJECT but was STRING

java - 在独立应用程序中使用 Jersey 的依赖注入(inject)

java - 使用私有(private)字段和私有(private)构造函数将对象写入文件

c++从另一个文件访问函数