According to the Java Spec (https://docs.oracle.com/javase/specs/jls/se8/html/jls-6.html#jls-6.6.2.2)
6.6.2.2. Qualified Access to a
protected
ConstructorLet
C
be the class in which aprotected
constructor is declared and letS
be the innermost class in whose declaration the use of theprotected
constructor occurs. Then:
If the access is by a superclass constructor invocation
super(...)
, or a qualified superclass constructor invocationE.super(...)
, whereE
is a Primary expression, then the access is permitted.If the access is by an anonymous class instance creation expression
new C(...){...}
, or a qualified anonymous class instance creation expressionE.new C(...){...}
, whereE
is a Primary expression, then the access is permitted.If the access is by a simple class instance creation expression
new C(...)
, or a qualified class instance creation expressionE.new C(...)
, whereE
is a Primary expression, or a method reference expressionC :: new
, whereC
is a ClassType, then the access is not permitted. Aprotected
constructor can be accessed by a class instance creation expression (that does not declare an anonymous class) or a method reference expression only from within the package in which it is defined.
In your case, access to the protected constructor of A
from B
would be legal from a constructor of B
through an invocation of super()
. However, access using new
is not legal.