Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

Herança pacotes diferentes

Para que seja possível herdar uma classe de outro pacote, ela precisa ser pública, correto? No caso seu construtor padrão assumirá o mesmo nível de acesso, se é public o construtor será public. Caso eu tenha:

package a;

public class A {
    A(){

    }
}

package b;

import a.A;

public class B extends A {

}

import b.B;

class Inheritance {
    public static void main(String[] args) {
        new B();
    }
}

Baseado no conteúdo do treinamento, o construtor padrão da classe "B" será:

public B(){
    super();
}

e o da classe "A", caso eu não tivesse declarado, ele assumiria o construtor padrão:

public A(){
    super();
}

mas ao declarar o construtor conforme o código acima, seu modificador de acesso é package default, então minha dúvida é, porque esse código compila e executa?

7 respostas

Se eu manter a estrutura do construtor padrão, default, caso eu não declare o modificador de acesso como: protected, private, ele irá manter o nível do modificador da classe?

Eu tinha achado estranho... bom, se o construtor da classe A tiver package private, a classe B ali não compila... Agora se vc deixar público, como no último trecho, aí compila.

O construtor padrão é público... Agora se vc declarar o construtor, aí a visibilidade é a declarada.. não tem um padrão.

Alberto Souza, eu também achei estranho pois declarei o construtor da classe A como package private, ao meu entender não compilaria ao criar um objeto da classe B. Porém o código acima compila e executa, eu não entendi o porque por isso abri o questionamento no fórum. A classe A é public mas o construtor é package private. Você sabe me dizer pq compila?

Oi Diego, vou ser chato e continuar achando que não compila... Pode disponibilizar o código no github, para eu dar uma olhada? Se o construtor ta com visibilidade de pacote, quem ta fora do pacote não enxerga.

https://github.com/DiegoProtec/heranca A classe para ser executada é a revisao.Inheritance.

Oi Diego, tem alguma coisa errada mesmo na sua estrutura do projeto... parece que vc ta compilando na mão... na sua estrutura, todas as classes acabaram compiladas no mesmo nível, é por isso que vc teve essa impressão. Se vc criar um projeto no eclipse, por exemplo e criar os pacotes certinhos, vc vai ver que isso não compila.

solução!

Alberto Souza, agora sim, então o problema está na arquitetura de pacotes e pastas, logo o conceito passado no treinamento é válido!? Obrigado pelo esclarecimento!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software