【问题标题】:Able to create a var with protected constructor? [duplicate]能够使用受保护的构造函数创建 var 吗? [复制]
【发布时间】:2023-03-15 17:30:01
【问题描述】:

我在一个项目中,我有一个 Actor 类,其中包含方法和数据成员。它就像一个抽象类,但我觉得将它设置为抽象没有用(每个方法都实现了)。

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

问题是在测试中,我可以实例化一个演员:

import org.junit.Test;

public class ActeurTest {

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

所以我的问题是:这怎么可能?我想知道只有子类可以使用/覆盖受保护的构造函数?

谢谢

【问题讨论】:

  • 可以从同一个包中调用。在这里查看:stackoverflow.com/questions/215497/…
  • 但在上面的sn-p中被标记为abstract。
  • 当我试用您的代码时,我收到一条错误消息:“Acteur' 是抽象的;无法实例化”。确保您正在编辑正确的文件,完成了干净的编译等等。您不应该能够构建这样的抽象类。如果您对声明为 protected 的内容的可见性感到困惑,请查看 this table

标签: java constructor protected


【解决方案1】:

对于您想知道只有子类可以 使用/覆盖受保护的构造函数。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-03
    • 2015-06-14
    • 1970-01-01
    • 1970-01-01
    • 2016-04-07
    • 2021-10-05
    • 2011-05-30
    • 1970-01-01
    相关资源
    最近更新 更多