Dúvida com questão sobre herança

Oi Pessoal,

Realizei um simulado, e fiquei com dúvida nesta questão, não sei senão interpretei(traduzi) bem a a questão:

1-)If a base class has a method defined as:
void method() { }
Which of the following are legal prototypes in a derived class of this class. Select the two correct answers.

a   1.  void method() { }
b   2. int method() { return 0;}
c   3. void method(int i) { }
d   4. private void method() { }

Eu respondi, C e D, mas a resposta correta é A e C.

Alguém saberia me dizer pq D também não pode estar correta?

Obrigada :lol:

O correto é A e C…

A é uma subscrição correta do método (o método sobrescrito pode ter um nível de acesso igual ou mais visível que o da superclasse)

C é uma sobrecarga válida, pois a assinatura (parametro) do método muda

Incorretas:

B Não é nem uma sobrescrita nem uma sobrecarga válida

D O modificador de acesso não pode ser mais restritivo

Entendi, mas o compilador aceita realizar as modificações indicadas nas letras B e D, mas não que dizer que são sobrescritas corretas do método Pai, sobrescrita só é quando alteramos a sobrecarga do método, o corpo do método e o modificador de acesso não pode ser mais restritivo que o do pai, é isso?

Entendi, mas o compilador aceita realizar as modificações indicadas nas letras B e D, mas não que dizer que são sobrescritas corretas do método Pai, sobrescrita só é quando alteramos a sobrecarga do método, o corpo do método e o modificador de acesso não pode ser mais restritivo que o do pai, é isso?

Vamos lá…

Sobrescrita:

A lista de argumentos do método não pode mudar, o modificador de acesso deve ser igual ou mais visível, o tipo de retorno não pode mudar, mas o tipo de retorno pode ser um subtipo.

Sobrecarga:

A lista de argumentos deve mudar, o tipo de retorno pode mudar.

só complementando:

B está incorreto porque para ser uma subscrição válida, não pode mudar os parâmetros e o retorno não pode ser alterado. Nesse caso, não mudou os parâmetros, continua sem nada, mas o tipo de retorno foi alterado. E não pode, exceto se passar no teste É-UM.

Exemplo rápido:

Animal getAnimal() { return new Animal(); }

pode ser subscrito como:

Dog getAnimal() { return new Dog(); }

Espero que tenha entendido.