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