Skip to content

Instantly share code, notes, and snippets.

@alexandreaquiles
Last active May 19, 2021 20:41
Show Gist options
  • Save alexandreaquiles/10272679 to your computer and use it in GitHub Desktop.
Save alexandreaquiles/10272679 to your computer and use it in GitHub Desktop.
Exemplo de colisão de métodos default no Java 8.
interface Aquatico {
default void move(){
System.out.println("Move na água...");
}
}
class Aviao {
public void move(){
System.out.println("Voa...");
}
}
/**
* @see http://pt.wikipedia.org/wiki/Hidroavi%C3%A3o
*/
class HidroAviao extends Aviao implements Aquatico {
//nao precisa implementar nem sobreescrever...
//O método da superclasse é escolhido
}
/**
* @see http://pt.wikipedia.org/wiki/Hovercraft
*/
class Hovercraft implements Aquatico, Terrestre {
public void move(){
System.out.println("Move na água e na terra...");
Aquatico.super.move();
Terrestre.super.move();
}
}
class HovercraftComPau implements Aquatico, Terrestre {
//^
//error: class HovercraftComPau inherits unrelated defaults for move() from types Aquatico and Terrestre
}
public class Programa {
public static void main(String[] args){
Hovercraft hover = new Hovercraft();
hover.move();
//imprime:
// Move na água e na terra...
// Move na água...
// Move na terra...
HidroAviao hidro = new HidroAviao();
hidro.move();
//imprime:
// Voa...
}
}
interface Terrestre {
default void move(){
System.out.println("Move na terra...");
}
}
@peas
Copy link

peas commented Apr 9, 2014

mais claro impossivel :). obrigado alexandre

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment