Questão 1 - Assinale a alternativa correta: No gabarito diz que essa é correta:
Os construtores da subclasse podem chamar construtores da superclasse através da palavra reservada this.
(ora, não é SUPER???)
Questão 2
public interface Interface1 {
default void metodo(){
System.out.println("Interface1");
}
}
public interface Interface2 {
default void metodo(){
System.out.println("Interface2");
}
}
public class Classe implements Interface1, Interface2 {
public void metodo() {
}
public void metodo1() {
Interface1.metodo();
}
public void metodo2() {
Interface2.metodo();
}
}
public class Principal {
public static void main(String[] args) {
Classe c = new Classe();
c.metodo();
c.metodo1();
c.metodo2();
}
}
No gabarito diz que esse código iria gerar err de stack overflow
Coloquei que as respostas seria mudar para:
Interface1.super.metodo() e Interface2.super.metodo()
O que vocês acham???
Olá,
Já tentou implementar as duas questões e ver por si próprio os resultados ?
Lógico que sim, mas peço a opinião dos colegas mais experientes.
Olá,
E quais foram os resultados obtidos, por favor ?
A questão 2 dá erro de compilação que seria solucionado com a alternativa que coloquei já a outra é teórica e pelo que sei o this() sempre fará uma chamada ao construtor da própria classe, enquanto o super() fará a chamada ao construtor da superclasse.
Mas, como disse, queria opiniões a respeito.
Olá,
Questão 1, o “this” é uma referência para o próprio objeto. O “this” não é um método, não se faz “this(…)”, o “super” é uma palavra-chave utilizada no construtor da subclasse para construir o objeto pai ou utilizado para acessar os atributos do objeto pai.
Using the Keyword super: https://docs.oracle.com/javase/tutorial/java/IandI/super.html
Questão 2, tem essa resposta aqui do StackOverflow: http://stackoverflow.com/questions/22685930/implementing-two-interfaces-with-two-default-methods-of-the-same-signature-in-ja
Não acho que sua solução iria surtir o efeito desejado.
Default Methods: https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html
Muito interessante o artigo sobre Default Methods: http://zeroturnaround.com/rebellabs/java-8-explained-default-methods/
Resolve sim:
public class Classe implements Interface1, Interface2 {
public void metodo() {}
public void metodo1() {
Interface1.super.metodo();
}
public void metodo2() {
Interface2.super.metodo();
}
}