Dúvida sobre protected

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á.

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();
}
} 

Você fez o import na segunda package?

:?:

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

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:

[code]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
}
}
[/code]

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.