java - 包私有(private)类中的 public 修饰符是多余的吗?

标签 java

假设我在 com.test 包的 Test.java 中声明了一个类 Test:

class Test {
    public void test() {

    }
}

我想知道,方法 test() 的公共(public)访问修饰符在这里不是多余的吗?因为 intellij 没有给我提示说它是。

我认为只有当类 Test 包含 public static void main(String[] args) {} 时才不是多余的我是对还是错?

最佳答案

这不是多余的。如果您有一些派生类,那么修饰符会产生巨大的差异。考虑类:

package ex.one

class Test {
    public void testPublic() {

    }

    void testPackage() {

    }    
}

和派生 Test.class 的另一个类

package ex.one

public class TestDerivate extends Test {

    private void doSomething(){
        //legal
        testPublic();
        testPackage();
    }

}

现在,当我们有另一个派生 TestDerivate.class 的类时,您可以在方法上看到不同的行为。在这种情况下,此类具有 public 修饰符。

package ex.two

public class TestDerivateInOtherPackage extends TestDerivate {
    public void test(){
         // legal
         testPublic();
         //illegal since it is only package visible
         testPackage();
    }

    @Override
    public void testPublic() {
        // still legal
    }

    @Override
    void testPackage() {
        // still illegal
    }

}

关于java - 包私有(private)类中的 public 修饰符是多余的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51236130/

相关文章:

java - 如何停止按下背面的媒体播放器,无论它是否正在播放?

java - 如何在不使用 JavaScript 的情况下通过 GWT 更改语言环境

java - Android: fragment 如何获取Activity的全局变量

java - Kafka生产者无法向服务器发送数据

java - 使用 Java 检测 CPU 速度/内存/互联网速度?

java - 如何使用 Project Tango 开发平板电脑启用 NFC?

java - 使用 java 在特定时间找不到文件时发送警报邮件

Java Web Start/可拖动小程序

java - 添加到日历日期...不准确?

java - Wildfly 9.0.2 + H2数据库(jdbc :h2:file not showing tables)