Import .*

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.

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

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”

[quote=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”[/quote]

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.

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:

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.

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

}
[/code]

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 { }

[code]
public class ExcecaoAB extends ExcecaoA{

}[/code]

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.