能够使用受保护的构造函数创建一个 var 吗?

Able to create a var with protected constructor?

我在一个项目中有一个 Actor class,里面有方法和数据成员。它就像一个抽象class,但我发现将它设置为抽象没有用(每个方法都已实现)。

public abstract class Acteur {
    /**
     * Empêchement d'instancier un acteur
     */
    protected Acteur() { }
}

关键是在测试中,我可以实例化一个 actor :

import org.junit.Test;

public class ActeurTest {

    @Test
    public void testActeurConstructeur() {
        Acteur acteur = new Acteur();
    }
}

所以我的问题是:这怎么可能?我想知道只有 sub-classes 才能 use/override 受保护的构造函数?

谢谢

For the question you are wondering that only sub-classes can use/override a protected constructor.

protected 可以在同一个包中访问。

Access Modifiers  In class     Same package    Anywhere but subclasses    Outside package & non relate
Private               Y             N                   N                          N
Default               Y             Y                   N                          N
Protected             Y             Y                   Y                          N
Public                Y             Y                   Y                          Y

Java Access Modifiers