Dúvida sobre protected

3 respostas
digofarias

Olha pessoal:

package One;

public class Fruit {

protected static void metodo1() {

System.out.println(Método 1 impresso!);

}

}

Certo! Essa é a classe que eu vou herdar pra usar o protected:
import One.Fruit;

public class Apple extends Fruit {

public static void main(String[] args) {

metodo1();

}

}

Usando essa classe Apple no pacote padrão, a compilação é OKEY e roda direitinho. Mas se eu mudar o pacote da classe Apple não funciona, por que isso!?

Aí eu acrescentei na classe Apple:

package Two;

import One.Fruit;

public class Apple extends Fruit {

public static void main(String[] args) {

metodo1();

}

}

Aí só porque eu mudei o pacote para “Two”, não compila mais e dá o seguinte erro:

java.lang.NoClassDefFoundError: Apple
Exception in thread “main”
Java Result: 1

Alguém sabe me explicar por quê?

Agradeço desde já.

3 Respostas

ramilani12

Sugiro vc dar uma olhada em especificador de acesso:

http://www.guj.com.br/content/articles/oop/oop.pdf

É o seguinte qndo vc declara um metodo ou onjeto protected só será visivel em mesmo pacote e na própria classe então mude a classe Apple para pacote one que deve funcionar:

package one;
import One.Fruit;
public class Apple extends Fruit {
public static void main(String[] args) {
metodo1();
}
}
Dieval_Guizelini

Você fez o import na segunda package?

:?:

http://java.sun.com/docs/books/tutorial/java/javaOO/accesscontrol.html

digofarias

Sim, eu fiz o import. Pq protected só é visível na própria classe e no mesmo pacote?

Eu fiz um código de exemplo do livro de Certificação Java que usa o protected em um método que não é do mesmo pacote e compilou direitinho, olha:

package certification;
public class Parent {
protected int x = 9; // acesso protegido
}

package other; // Pacote diferente
import certification.Parent;
class Child extends Parent {
public void testeIt() {
System.out.println("x is " + x); // Sem problema, Child herda x
} 
}

Esse código acima usou pacotes diferentes, um método protected e mesmo assim compilou com sucesso.

No exemplo que eu citei acima (no primeiro exemplo da minha dúvida), eu coloquei em pacotes diferentes e compilou, deu tudo certo, mas UM dos pacotes foi O PADRÃO e o outro um pacote qualquer. Quando usei DOIS pacotes (onde nenhum é o PADRÃO), deu erro.

Aí surgiu essa minha dúvida.

Criado 5 de dezembro de 2006
Ultima resposta 5 de dez. de 2006
Respostas 3
Participantes 3