2016-11-30 2 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» является абстрактным, не может быть создан ». Убедитесь, что вы редактируете правильные файлы, выполняете чистую компиляцию и так далее. Вы не сможете построить такой абстрактный класс. Если вы смущены видимостью вещей, объявленных как «защищенные», посмотрите [эту таблицу] (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

Смежные вопросы