Cara, vamos lá. Deixa eu tentar explicar, pois eu entendo que você está com muita dificuldade.
As primeiras classes java que desenvolvemos quase nunca apresentam a definição do pacote. São classes simples, direcionadas a execução de uma única tarefa. Correto?
Assim sendo, é comum criarmos classes assim:
publc class Bla {
public static void main(String[] args) {
//Faz algo aqui
}
}
Porém, quando começamos a trabalhar com mais classes e, principalmente, precisamos interagir com mais de uma delas, temos a opção de aglomerar tudo num só diretório e fazer funcionar ou seguir uma boa prática e separá-las por funcionalidade ou afinidade.
Aí é que entra o package (pacote).
Veja a diferença para a classe anterior:
package br.com.teste;
publc class Bla {
public static void main(String[] args) {
//Faz algo aqui
}
}
Agora suponha que dentro do main eu quero uma instância da seguinte classe:
package br.com.teste.processors;
public class Processor {
public void execute(){
//Faz algo
}
}
Eu não posso, simplesmente, pegar e fazer isso:
package br.com.teste;
publc class Bla {
public static void main(String[] args) {
Processor proc = new Processor(); //Erro: classe Processor não está no mesmo package
}
}
Como resolvo isso? Simples, usando import:
package br.com.teste;
import br.com.teste.processors.Processor;
publc class Bla {
public static void main(String[] args) {
//Faz algo aqui
}
}
Mas, e o que isso tem a ver som o sistema de arquivos (file system) de um sistema operacional qualquer?
Se você usa uma IDE, absolutamente nada! (Se não usa, tem umas peculiaridades, mas, na prática, é como se não se considerasse isso).
Assim sendo, não importa se você salvou o que você fez em C:\blablabla\etcetcetc, afinal, o que vai valer é se a classe está naquele mesmo package ou se você importou o package adequado.
Existe outro porém: você só pode referenciar packages que estejam dentro do mesmo projeto.
Mas, então, como eu faço para aproveitar um projeto de terceiro ou meu, mas que não é esse mesmo?
Simples: quando você cria um projeto, ele pode ser exportado de N formas. Uma delas é como um jar não executável (se não sabe o que é um jar, pesquise!). Ele contém várias classes que servem como auxiliares.
Para nossa situação, esse jar deve, obrigatoriamente, ser importado para o projeto. Ou seja, incluído em seu classpath. Uma vez que isso seja feito, você já pode referenciar a(s) classe(s) desse projeto nas classes do teu.