Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Java 8 Default Methods

Com a introdução do Java 8 Default Methods não estariam desatualizadas as seguintes afirmações?

não é possível reaproveitar código da mãe.

e

Mas a certeza de que, ao mudar uma classe, não afetaremos as outras, é muito confortável.

4 respostas

Oi Tammy, não achei as frases exatamente... Entretanto os default methods funcionam apenas em função de outros métodos declarados na interface... Você não acessa atributos por exemplo... Então acho que as frases continuam valendo sim :).

Oi Tammy,

Mas mesmo com os métodos defaults não é possível reaproveitar atributos apenas comportamentos.

Como os atributos não são compartilhados, o impacto também acaba sendo muito menor do que usando herança.

Abraço!

Olá pessoal, obrigada pelas respostas porém ainda discordo.

O texto fala de reaproveitar código e não atributos e talvez seja este o problema do texto.

Fiz aqui um exemplo no qual podemos reaproveitar código da interface nas classes que implementam a interface. Adicionei comentários nos quais eu explico o que eu entendi, espero que consigam entender.

public interface AreaCalculavel {
  double calculaArea();

  // Por existir implementacao na interface as classes que implementam a interface nao precisam reescrever este metodo,
  // logo se elas conseguem usar a implementacao e não é necessário implementar nestas classes os metodos podemos considerar
  // isto reaproveitamento de codigo
  // contradizendo assim a frase "não é possível reaproveitar código da mãe."
  default String dizOi() {
    return "Oi";
  }

  default String dizTchau() {
    // Situacao hipotetica na qual o metodo retorna algo errado e por nao ser reescrito nas classes filhas acaba
    // alterando o comportamento sem precisar alterar as classes filhas
    // contratizendo assim "Mas a certeza de que, ao mudar uma classe, não afetaremos as outras, é muito confortável."
    return "Oi";
  }
}


public class Quadrado implements AreaCalculavel {
  private int lado;

  public Quadrado(int lado) {
    this.lado = lado;
  }

  @Override
  public double calculaArea() {
    return this.lado * this.lado;
  }
}

public class Teste {
  public static void main(String[] args) {
    AreaCalculavel quadrado = new Quadrado(3);

    System.out.println("calculaArea: " + quadrado.calculaArea()); //Output => calculaArea: 9.0
    System.out.println("dizOi: " + quadrado.dizOi());             //Output => dizOi: Oi
    System.out.println("dizTchau:" + quadrado.dizTchau());        //Output => dizTchau:Oi
  }
}

O texto está na responsta do exercício 3 como podemos ver nesta imagem:

img

solução!

Então, vc realmente pode criar os métodos e reaproveitar código, só eh um nível de acoplamento menor. Dado que seu método default só utiliza outros métodos declarados na interface. E sim, o texto precisa ser corrigido :).

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software