2016-11-30 57 views
0

我在一个项目中,我有一个Actor类,其中包含方法和数据成员。它就像一个抽象类,但我认为将它设置为抽象(每个方法都实现)并不有用。能够用受保护的构造函数创建一个var?

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

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

感谢

+1

可以从同一个包被调用。检查在这里:http://stackoverflow.com/questions/215497/in-java-difference-between-default-public-protected-and-private – midor

+0

但它被标记为摘要在上面的片段。 – aioobe

+0

当我试用你的代码时,我得到一个错误:“Acteur是抽象的;不能实例化”。确保你正在编辑正确的文件,做一个干净的编译等等。你不应该能够构建这样的抽象类。如果你对声明为'protected'的东西的可见性感到困惑,请查看[this table](http://stackoverflow.com/a/33627846/276052)。 – aioobe

回答

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

相关问题