É possível acessar uma classe do pacote default?

5 respostas
P

Estou com essa dúvida. Eu tentei e não consegui.

Fiz assim:

package food;

public class Mercado {

public static void main(String[] args) {
	

Apple a = new Apple();
	

}

}


public class Apple {

public String comer(){
	return "comendo";
}

}


Ou seja, Apple não pertence a nenhum pacote. E Mercado pertence ao pacote food. Eu não consigo instanciar nem extender Apple através de classes que não estejam no pacote default também. Mas Apple acessa as classes públicas dos outros pacotes. Por que isso ocorre???

Obrigado

5 Respostas

V

Voce consegue acessar porque a classe é pública sendo assim, ela tem visibilidade pra todas as classes e packages da mesma…

Lembre-se que o acesso default as classes é package e não public como muitos pensam…

LPJava

isso qdo estar se aprendendo as vezes eh meio confuso mais vamos a pequena explicacão.

modificador default refere-se a nivel de acesso ao pacote… qdo vc tem uma class como default ela pertence aquele pacote e mais a ninguem se vc quiser criar uma instancia dessa classe, a outra classe que for criar deve estar nesse mesmo pacote. exemplo:

package cap1;

 class Defau {
static int x = 10; 
}
/*class que pertence ao pacote*/

package cap1.Carros;
import cap1.Defau;
public class Fau extends Defau{

	public static void main(String[] args) {
		System.out.println(x);
	}
}
/* observe que ele nem importa a minha class que eh somente do pacote dela*/

e o modificador public ele diz estou disponivel, visivel para todos mesmo em pacotes de diferentes ja que é publico… assim veja publico como a PM, hehe ela presta um serviço publico, deve proteger cada cidadão sem restritões… agora o default veja o seguinte… vc tem um segurança particular na sua casa e diz pra ele… olhe tudo que estiver dentro da minha casa vc deve fazer a segurança… blz? entao esse segurança so é visivel dentro da package casa. agora vamos dizer que vc pegou o radio do vizinho emprestado… ele vai ser visivel para o segurança ja que está na sua casa… hehe
flW… espero ter ajudado um exemplo com public e default:

package cap1;

 public class Defau {
static int x = 10; 
}
/*minha class eh public disponivel para todos, porem
 o membro so pode ser visto nesse pacote*/

package cap1.Carros;
import cap1.Defau;
public class Fau extends Defau{

	public static void main(String[] args) {
		System.out.println(x);
	}
}
/*a class eh importada pq ela eh public porem o membro nao posso acessa-lo de 
um pacote diferente, somente aonde ele foi declarado isso nao compila*/
Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
	The field Defau.x is not visible
P

muito obrigado pela resposta de voces! os modificadores das classes eu compreendi.

mas minha duvida principal continua. Porque eu nao posso acessar classes (publicas ou nao) de Pacotes Default (sem nome)? Seria porque a JVM nao consegue distinguir qual classe eu estou me referindo???

nadilsons

Pelo o que entendi a dúvida do Paulo nao é sobre a visiblidade de classes… e sim sobre a não possiblidade de se referenciar a uma classe sem pacote (pacote default, por definição) em classes que estao dispostas em algum pacote.

Bem, pelo que sei realmente nao é possivel referenciar classes que estao no pacote default em classes alocadas em outros pacotes, nao importando o modificador de acesso da classe do pacote default

P

justamente nadilsons…essa eh a minha duvida! agora eu queria saber o porque disso! :?

Criado 22 de março de 2007
Ultima resposta 22 de mar. de 2007
Respostas 5
Participantes 4