Dúvida interfaces

Pessoal, sou iniciante em java e estou lendo um livro e, apesar de ser grande, não explica direito sobre “the marker interface pattern” (não sei qual a tradução específica para o português). :wink:

A questão é a seguinte: ele fala que interfaces podem ser usadas somente para especificar um conjunto de classes que tem alguma capacidade ou característica em comum mas não explica como fazer. Ele dá um exemplo da interface ‘Cloneable’ que deve ser implementada na classe na qual vc deseja chamar o método ‘clone()’ da classe ‘Object’.

Como se faz isso?!?! :?

Valeu!! :wink:

O exemplo usando “Cloneable” é bastante infeliz, já que implica em implementar um determinado método que não aparece na interface ( :frowning: )

Eu usaria a interface java.io.Serializable como exemplo.

“Marker interfaces” são interfaces sem métodos, que podem ser usadas para indicar se a classe tem uma determinada “propriedade” ou “capacidade” - no caso de java.io.Serializable, por exemplo, se ela é serializável.

Tipicamente você faz um teste com “instanceof”.

Hoje em dia você poderia também usar “Annotations” para finalidade semelhante.

Entendi mais ou menos…

No caso específico de uma função, percebi que quando vc especifica uma interface como parâmetro, vc restringe os objetos passados como parâmetro àquela função, pois apenas objetos que implementem aquela interface podem ser passados para a função.

Agora, neste caso de “marker interfaces”, não entendi direito como se implementa. Pois se vc quer usar o método clone da classe Object na sua classe Carro por exemplo, vc tem que declará-la assim:

public class Carros implements Cloneable
{/etc/}

Como cria-se esta restrição? Na própria classe Object? Como?
Muitas dúvidas… :lol:

Obrigado novamente! :wink: