Considere as seguintes classes e a interface Java que ocupa...

Próximas questões
Com base no mesmo assunto
Q2319355 Programação

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?

Alternativas

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