Import .*

5 respostas
ECO2004

Se eu tenho a seguinte estrutura de pacotes e classes (M1 e M2 são pacotes)

M1 classeA.java classeB.java classeC.java M2 classeD.java classeE.java

Se eu faço em meu programa:

import M1.*

Estarei importando além das classe A, B C as classes D e E?

Ou seja, M1 é uma pasta que possui as classes A, B e C e a pasta M2. M2 possui as classes D e E.

5 Respostas

J

Não , o import importa apenas as classes do pacote e não dos subpacotes.

Rodrigo_Sasaki

Não. Mas você poderia ter descoberto isso rapidamente testando :slight_smile:

Você só importa as classes do pacote que definiu no import, não classes em pacotes “filhos”

ECO2004

Rodrigo Sasaki:
Não. Mas você poderia ter descoberto isso rapidamente testando :slight_smile:

Você só importa as classes do pacote que definiu no import, não classes em pacotes “filhos”

Obrigado…

Eu “sabia” disso…é que vi uma questão de concurso público fazendo isso e ele levava em consideração que importava. Como as outras alternativas também estavam sem erros, eu desconfiei.

E

Pois é, questoes de concursos públicos costumam ser “questionáveis”. Talvez o cara que escreveu a questão não tenha testado direito :slight_smile:

ECO2004
entanglement:
Pois é, questoes de concursos públicos costumam ser "questionáveis". Talvez o cara que escreveu a questão não tenha testado direito :)

Questões de concursos colocam em prova a segurança no que sabemos.
Teve uma questão que vou até compartilhar...não é usual esse tipo de coisa, por isso dúvidas aparecem.

public abstract class ClasseA {
	private int x = 1;
	int y = 2;

	public ClasseA(int p) {
		x = p;
	}

	public int mt_a(int a, int b) {
		try {
			if (a % 2 == 1)
				throw new ExcecaoAB();
			return a + b;
		} catch (ExcecaoAB e) {
			return a * x + b * y;
		} catch (Exception e) {
			return a * x - b * y;
		}
	}
}
public class ClasseB extends ClasseA {
	int x = 2;
	int y = 4;

	public ClasseB() {
		super(0);
	}

	public int mt_a(int a, int b) {
		try {
			if (b % 2 == 1)
				throw new ExcecaoA();
			return a - b;
		} 
		
		catch (ExcecaoAB e) {
			return 4 * y;
		} 

		catch (Exception e) {
			return 5 * x;
		} 
		
		finally {
			x++;
			y++;
		}
	}
}
public class ExcecaoA extends Exception {
}
public class ExcecaoAB extends ExcecaoA{

}
public class Q65 {
	public static void main(String[] args) {
		ClasseA c = new ClasseB();
		System.out.println(c.mt_a(2, 3));
	}
}

Normalmente, nós liberamos recursos em blocos finally. O que a banca fez nesse programa foi incrementar uma variável depois de um return, dentro de um bloco finally. Gerou dúvida em mim. Tive que depurar para ver o que fazia, pois finally sempre executa, não importa o que ocorra. Mas o bloco catch mandava retornar o controle para o chamador antes de finally executar.

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