SóProvas


ID
2566432
Banca
INAZ do Pará
Órgão
CFF
Ano
2017
Provas
Disciplina
Programação
Assuntos

A Programação Orientada a Objetos (POO) diz respeito a um padrão de desenvolvimento que é seguido por muitas linguagens, como C# e Java. Em relação à herança, sobreposição de métodos e escopo em Java, é correto afirmar:

Alternativas
Comentários
  • a) ERRADO. A instrução super() é justamente para chamar o construtor padrão da classe pai.
    b) ERRADO. Não tem essa necessidade.
    ------
    Moçada, existem algumas regras para a sobreposição de métodos. Uma delas é que o método que está sobrescrevendo deve ter a mesma acessibilidade (método de acesso) ou ser mais acessível que o método sobrescrito. Caso esses requisitos não sejam seguidos, será disparado um erro de compilação.

    Dessa forma, se o método pai é públic, então o método que sobrescrevê-lo deve ser public.
    Se o método pai é protected, então o método que sobrescrevê-lo deve ser protected ou public.
    Se o método pai é private, então o método que sobrescrevê-lo deve ser private ou protected ou public.

    Gabarito: letra D.
    Referência: https://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.4.8.3

     

  • Complementando o comentário do colega...

     

    d) Um método declarado como protected pode sobrepor um método private da superclasse.

     

    Nesse cenário, não ocorre de fato uma sobrescrita, uma vez que a subclasse não terá acesso a esse método.

    Há uma referência sobre isso no próprio link fornecido.

     

    Note that a private method cannot be hidden or overridden in the technical sense of those terms. This means that a subclass can declare a method with the same signature as a private method in one of its superclasses, and there is no requirement that the return type or throwsclause of such a method bear any relationship to those of the private method in the superclass.

     

    Segue outra fonte que torma mais claro isso:

     

    Uma classe só pode sobrescrever os métodos da classe mãe aos quais ela tem acesso.

    Por isso, o exemplo abaixo compila, mas não ocorre sobrescrita alguma.

     

    public class Filme {

        private void alugarFilme(int dias) { }

    }

    class Filme24Horas extends Filme {

        public void alugarFilme(int dias) { }

    }

     

    São dois métodos completamente diferentes e um não tem nada a ver com o outro.

     

    Fonte: http://high5devs.com/2015/05/como-sobrescrever-metodos-em-java/

  • Quem não tem acesso:  - -> D

  • Complemento ao comentário do colega Jeean Carlos


    Private --> Default --> Protected --> Public


    Um método private pode ser sobreposto por um default e assim sucessivamente

    O método da Direita pode sobrepor a outro igual ou a um que esteja a sua esquerda.


    Na questão temos: Private --> Protected (o que é possíve)


    Fonte: https://pt.slideshare.net/ludimila_monjardim/poo-19sobrecarga-sobreposio

  • a) ERRADO. Posso usar super.metodoPai() ou só metodoPai() caso esse método não exista na classe filha.

    b) ERRADO. Para chamar o construtor pai não é "this", mas "super()"