Eclipse mostra um erro ao tentar usar o construtor protegido em uma subclasse localizada em outro pacote [duplicado]

Esta pergunta já tem uma resposta aqui:

Entendendo o modificador protegido do java respostas

omunidade Hello Hello Stackoverflow: -]

Sou um novo membro e, em primeiro lugar, gostaria de agradecer pelos conselhos e correções muito úteis que você fornece. Como sou francês, perdoe-me se meu inglês não for perfeit

Aqui está minha pergunta: atualmente estou aprendendo a linguagem de programação Java e queria testar algumas coisas de herança. Se eu entendi direito, um campo declarado comoprotected pode ser acessado por classes que estão no mesmo pacote que a classe em que o campo protegido é declarado e por todas as suas subclasses, estejam elas no mesmo pacote ou nã

Então, eu fiz essas 4 classes para testar isso. Eu tenho um pacote chamado "package1" contendo as classes A e C. Eu também tenho um segundo pacote chamado "package 2" contendo as classes A2 e C, em que A2 estende A. As duas classes C têm exatamente o mesmo código, apenas o pacote em que eles estão localizados alterações. Eles não estendem A.

Em uma classe, declarei alguns membros com propriedades de acesso diferentes, especialmente o construtor que é declarado comprotected visibilidade. Aqui está o código das quatro classes.

package1, classe A:

package package1;

public class A {

    public int a;
    protected int b;
    private int c;
    int d;

    protected static int h = 30;

    protected void aff(){
        System.out.println(h);
    }

    protected A(){
        a = 1;
        b = 2;
        c = 3;
        d = 4;
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub

    }

}

package 1, classe C:

package package1;

public class C {

    public C(){
        super();
    }

    public void app(){
        A obj = new A(); //////// OK
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub


        A obj = new A(); //////// OK
        obj.aff(); //////// OK

        System.out.println(obj.a);

    }

}

package2, classe A2 (estende A):

package package2;
import package1.A;

public class A2 extends A{

    public int x;

    A2(){
        super();
    }


    public void app(){
        A obj = new A(); //////// ERROR
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub


        A obj = new A(); //////// ERROR

        A2 obj2 = new A2();
        obj2.aff(); //////// OK



    }

}

package2, classe C:

package package2;
import package1.A;

public class C {


    public C(){
        super();
    }

    public void app(){

        A obj = new A(); //////// ERROR
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub


        A obj = new A(); //////// ERROR
        obj.aff(); //////// ERROR

        System.out.println(obj.a);

    }

}

Para classe C no pacote2, o códigoA obj = new A(); lança um erro, mas não é o caso da classe C no pacote1. Correto porque o construtor é declarado comoprotected e C no pacote2 não são uma subclasse de A, enquanto C está no pacote1. Até esse ponto, eu entendo.

Onde eu tenho um problema é com o códigoA obj = new A(); na classe A2: onde quer que esteja escrito, gera um erroThe constructor A() is not visible ... Como a classe Um construtor é declarado comoprotected, por que não consegui instanciar um objeto do tipo A na classe A

Quando declaro Um construtor comopublic, Funciona bem. Além disso, se eu colocar a classe A2 no pacote1, deixando o código como está, ele também funciona. Parece que instanciar um objeto em uma subclasse de A só é possível se a subclasse estiver localizada no mesmo pacote se um construtor for declarado comoprotected.

No entanto, como você pode ver, se eu instanciar primeiro um objeto A2 e depois chamar a classe Aprotected aff (), lá funciona e a regra protegida é respeitad

Alguém tem a explicação para esse erro? Ao instanciar um objeto de superclasse em sua subclasse, essa subclasse sempre está localizada no mesmo pacote que sua superclasse, se o construtor da superclasse for declarado comoprotected? E por que é esse o cas

Ou isso tem a ver com o fato de que um construtor não é herdado por subclasses? Mas não consigo descobrir por que, se for esse o caso ...

Muito obrigado por reservar um tempo para ler e responder: -]

questionAnswers(2)

yourAnswerToTheQuestion