Dúvidas no estudo para certificação - Interfaces e Enum

Comecei a estudar para a certificação pelo livro da Kathy Sierra (SCJP 1.6).

Minhas dúvidas são:

Já estendi que não há herança múltipla em Java, desta forma só posso estender uma classe, mas posso implementar tantas interfaces quantas eu quiser.
Como fica se eu implementar duas interfaces que não tem qualquer relacionamento, mas com os mesmos métodos?

Algo do tipo:


public interface Carro {
	public void abrirPorta();
}

public interface Caminhao {
	public void abrirPorta();
}

public class Teste implements Carro, Caminhao {

	public static void main(String[] args) {
		Teste t = new Teste();
		
		t.abrirPorta();
	}

	/// Este método pertence a qual das duas interfaces? Carro ou Caminhão?
	public void abrirPorta() {}
}

Outra dúvida que tenho é sobre Enum:

Vi que Enum pode ser declarando tanto dentro como fora da classe, como a seguir:


// Enum declarado fora da classe
enum Estacoes {VERAO, INVERNO, OUTONO, PRIMAVERA};

public class Teste {
	public static void main(String[] args) {
		Teste t = new Teste();
		
		System.out.println(Estacoes.VERAO);
	}
}

// Enum declarado dentro da classe

public class Teste {

	enum Estacoes {VERAO, INVERNO, OUTONO, PRIMAVERA};

	public static void main(String[] args) {
		Teste t = new Teste();
		
		System.out.println(Estacoes.VERAO);
	}
}

Qual a diferença? Quais as implicações entre colocar dentro ou fora da classe? Não vi nenhuma diferença para a classe Teste, só para outras classes do mesmo pacote que não conseguem ter visibilidade no segundo caso e para classes de outro pacote não conseguem ter visibilidade em caso nenhum. Mas e para a classe Teste, há alguma diferença?

Fico grato pelos esclarecimentos.

Não sei se tem muito haver o que vou falar, sou iniciante, mas ambos metodos abrir porta são de veiculos, ou seja carro e caminhão poderiam herdar os metodos de uma classe veículo, que no geral devem fazer a mesma coisa! No seu exemplo elas de certa forma tem relacionamento…

Caso o metodo das interfaces ( abrirPorta ) tenha o mesmo tipo de retorno, a classe Teste pode ser instanciada tanto em uma variavel caminhão como em uma variável carro.
Se o método tiver diferentes tipos de retorno, os parametros tem de ser diferentes( Ou em ordem diferente ).

Exemplo:

Carro c = new Teste();
Caminhão n = new Teste();
c.abrirPorta();
n.abrirPorta();

// O metodo vai pertencer à interface da variável. Exemplo, no c.abrirPorta, o método vai ser da interface Carro, etc.
// Se você declarar em uma variavel da propria classe, como em Teste t = new Teste(), o método não será atribuido à nenhuma das interfaces.
// Uma boa prática é tambem criar uma interface que contenha esse metodo em comum e fazer as outras interfaces herdarem dela.

se você fizer uma classe implementar duas interfaces diferentes que tenham um metodo de mesmo nome, de diferentes tipos de retorno e de parametros do mesmo tipo, você nunca conseguira compilar a classe…

Sobre as enums, elas são muito parecidas com classes comuns, podem ser tanto internas como externas. Estude um pouquinho sobre classes internas =D
boa sorte []`s

Primeiramente, sobre Enum eu não vou explicar para você porque não quero acabar com a surpresa do aprendizado que você terá mais para frente no livro da kathy, mais vou lhe dar uma leve explicação sobre herança, com analogias. Aprendi aqui mesmo no fórum mais não me lembro com quem, me desculpe sobre isso e não deixem de corrigir.

Quando vamos falar de herança no geral, ou seja quando há o implementamento de interfaces, não falamos só sobre a regra de herança e sim sobre herança de responsabilidade, a classe tem um contrato e se submete a ter determinado método. Um exemplo disso são essas duas interfaces que você passou, é de prasti que interfaces são “100% abstract”, métodos não implementados, por esse motivo se você implementar essas duas interfaces com a mesma assinatura de métodos abstratos, não precisaria escrever o mesmo método duas vezes.

Obs: No trabalho você trabalha com dois superiores, ele pedem para você fazer determinado serviço ou seja duas pessoas deram a você o mesmo serviço (a mesma responsabilidade), mais você faz o mesmo serviço duas vezes? exatamente nesse ponto que eu quero chegar, você so precisar fazer o trabalho apenas uma vez e terá submetido o contrato com as duas interfaces de uma só vez.