Classes Abstratas

3 respostas
A

Pessoal, estou com uma dúvida referente a classes abstratas.

Defini uma classe abstrata A1 com 2 metodos (metodoA, metodoB), e defini outra classe abstrata que implementa um destes metodos (metodoA), porem o mesmo esta com nivel de acessibilidade "protected", e pelo que andei lendo para sobrescrever um metodo, o mesmo não pode ser mais restritivo que o metodo pai.

Então porque o metodoA na classe A2 é protected e o compilador não apresenta problemas?

public class Principal extends A2 {

	public void metodoB() {
		System.out.println("Principal");
	}
	
	public static void main(String[] Args) {
		Principal pr = new Principal();
		pr.metodoA();
		pr.metodoB();
	}
}

abstract class A1 {
	abstract void metodoA();
	abstract public void metodoB();
}

abstract class A2 extends A1 {
	protected void metodoA() {                 << METODO PROTECTED
		System.out.println("A2");
	}
}
Att.

Astork

3 Respostas

BrunoBastosPJ

O Protected é menos restritivo do que o acesso padrão.

O método metodoA que você sobreescreve tem acesso padrão, o que significa que ele só é enxergado por classes do mesmo pacote.
Já o modificador de acesso protected pode ser enxergado por classes do mesmo pacote, e por subclasses.

Por isso o compilador não apresenta problemas.

Abs

J

Seguindo a explicação do Bruno, o contrario é que não funciona:

abstract class A1 {  
   protected abstract void metodoA();  
   abstract public void metodoB();  
}  

abstract class A2 extends A1 {  
   void metodoA() {                   << ERRO
      System.out.println("A2");  
   }  
}
A

Realmente, eu estava confundindo com interface onde os metodos são sempre public

Mas as classes abstract não tem esta restrição, pelo contrario ela é como qualquer outra classe.

Valeu pela ajuda

Criado 28 de julho de 2008
Ultima resposta 29 de jul. de 2008
Respostas 3
Participantes 3