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.