Qual fragmento de código irá compilar? (Marque todas as corretas.)
A. interface Base2 implements Base { }
B. abstract class Class2 extends Base {
public boolean m1 () { return true; } }
C. abstract class Class2 implements Base { }
D. abstract class Class2 implements Base {
public boolean m1 () { return (true); } }
E. class Class2 implements Base {
boolean m1 () { return false; }
byte m2 (short s) { return 42; } }
De acordo com a resposta ao final do livro, as afirmativas corretas são C e D. A afirmativa E, ele diz que está errada porque os métodos de interfaces são implicitamente public, então os métodos sendo implementados precisam ser public. (Objetivo 1.1). Minha dúvida é: Os modificadores no caso da letra E não são opcionais??
Os modificadores na sobrescrita de um método de uma interface NÃO são opcionais.
Quando uma classe implementa uma interface ela é OBRIGADA a sobrescrever os métodos da interface.
A regra de sobrescrita é a seguinte:
-O método sobrescrito NÃO pode ter modificador de acesso mais restrito do que o método pai, somente mais abrangente.
Seguindo a ordem de modificadores dos mais restritos para os mais abrangente:
private
default
protected
public
Sendo que os métodos de uma interface são implicidamente public eles SÓ podem ser sobrescritos como public, porque os outros modificadores são de acesso mais restrito do que o dele.