Considere as seguintes classes e a interface Java que ocupa...
Considere as seguintes classes e a interface Java que ocupam arquivos separados:
package pk1;
public interface Itf {
public void m1(String s);
public void m2(String s1, String s2);
}
package pk2;
public abstract class A {
public void m1(String s1) {
System.out.println("*** " + s1);
}
public void m2(String s1, String s2) {
System.out.println("*** " + s1 + " " + s2);
}
}
package pk3;
import pk2.*;
import pk1.*;
class B extends A implements Itf {
public void m3() {
System.out.println(" B - m3 ");
}
}
package pk3;
public class C extends B {
public void m4() {
System.out.println(" C - m4 ");
}
}
package pk3;
import pk2.*;
public class D extends A {
public void m4() {
System.out.println(" C - m4 ");
}
}
Qual implementação da classe Main NÃO produz erro de compilação?
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Gabarito: E
Vamos analisar a questão, que trata da compatibilidade de classes e interfaces em Java.
A questão apresenta três pacotes (pk1, pk2 e pk3) com classes e interfaces que ocupam arquivos separados. A interface Itf no pacote pk1 possui dois métodos: m1 e m2. A classe abstrata A no pacote pk2 implementa esses métodos. No pacote pk3, temos as classes B (que estende A e implementa Itf), C (que estende B) e D (que estende A).
Agora, analisando as alternativas fornecidas:
Alternativa E - Correta:
import pk1.*;
import pk2.*;
import pk3.*;
public class Main {
public static void main(String[] args) {
Itf o;
o = new pk3.C();
o.m2("Brasil", "2023");
}
}
Nesta alternativa, a classe C é instanciada e atribuída à variável Itf. Como C herda de B, que implementa Itf, a implementação está correta, e chamando o método m2 não causa erro de compilação.
Alternativas Incorretas:
Alternativa A:
import pk1.*;
import pk2.*;
import pk3.*;
public class Main {
public static void main(String[] args) {
Itf o;
o = new B();
o.m2("Brasil", "2023");
}
}
Nesta alternativa, a classe B é instanciada. Embora B implemente Itf, falta a implementação do método m1, resultando em erro de compilação.
Alternativa B:
import pk1.*;
import pk2.*;
import pk3.*;
public class Main {
public static void main(String[] args) {
Itf o;
o = new pk3.B();
o.m2("Brasil", "2023");
}
}
Esta alternativa é similar à alternativa A. Embora a classe B seja instanciada no pacote pk3, ela ainda possui o mesmo problema: B não implementa m2 conforme necessário pela interface Itf.
Alternativa C:
import pk1.*;
import pk2.*;
import pk3.*;
public class Main {
public static void main(String[] args) {
Itf o;
o = new A();
o.m2("Brasil", "2023");
}
}
Nesta alternativa, a classe A é abstrata e não pode ser instanciada diretamente, resultando em erro de compilação.
Alternativa D:
import pk1.*;
import pk2.*;
import pk3.*;
public class Main {
public static void main(String[] args) {
Itf o;
o = new D();
o.m2("Brasil", "2023");
}
}
A classe D estende A mas não implementa a interface Itf, resultando em erro de compilação ao tentar atribuir uma instância de D a uma variável de tipo Itf.
Portanto, a alternativa E é a única que não produz erro de compilação, pois utiliza a classe C, que herda de B e implementa os métodos da interface Itf.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
Boa sorte
Complementando o gabarito: A Classe B NÃO É Pública, portanto ela não é visivel no método main por isso o objeto "o" não pode ser instanciado como um objeto "B". O que torna a alternativa "a" e "b" erradas.
A alternativa "c" está errada pois não é possível instanciar uma classe abstrata.
A alternativa "d" está errada pois a classe D não implementa a interface Itf.
já a classe C é publica e portanto visivel ao metodo main, não havendo problema em instanciar o objeto "o" como sendo do tipo C. E a classe C herda os metodos da classe B que por sua vez herda os metodos da classe A e ao mesmo tempo a classe B também implementa a interface Itf não havendo problema em chamar o metodo m2. Tornando a Letra E correta
Questão zoadíssima aqui no QC. nem da pra entender com esse espaçamento .
o=new pk3.C();
Alguém pode me explicar isso? esse pk3.
Ele realmente é necessário ou facultativo ? Pq to vendo ali que já importou o package da classe C
Questão zoadíssima aqui no QC. nem da pra entender com esse espaçamento .
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo