[Dúvida] Declarações de Acesso (Kathy Sierra)

8 respostas
Mr_Arthur

Um exercício me deixou bastante intrigado na parte de Declarations and Access Control (Capítulo 2) do livro de Kathy Sierra.
No exercicio 3 segue o seguinte código.

  1. Given the following,

  2. abstract class A {

  3. abstract short m1() ;

  4. short m2() { return (short) 420; }

  5. }

  6. abstract class B extends A {

  7. // missing code ?

  8. short m1() { return (short) 42; }

  9. }

which three of the following statements are true? (Choose three.) (Segue em negrito as corretas)

A. The code will compile with no changes.

B. Class B must either make an abstract declaration of method m2() or implement
method m2() to allow the code to compile.

C. It is legal, but not required, for class B to either make an abstract declaration of method
m2() or implement method m2() for the code to compile.

D. As long as line 8 exists, class A must declare method m1() in some way.

E. If line 6 were replaced with ?class B extends A {? the code would compile.

F. If class A was not abstract and method m1() on line 2 was implemented, the
code would not compile.

Eu não entendi o motivo da resposta C ser correta,
não sei se foi um erro de tradução meu, mas aí diz que é legal fazer a declaração abstrata do metodo m2 que é implementado
em class A em class B?

8 Respostas

Mr_Arthur

Ah pessoal, para quem ficar a dúvida aí eu consegui esclarer…
uma subclasse pode declarar o metodo da superclasse abstrato sim mesmo que ele já tenha sido implementado na superclasse.

Minhas desculpas pelo tópico “atoa”.
Mais fica o esclarecimento aí pra quem se deparar com esta dúvida.

jopss

" uma subclasse pode declarar o metodo da superclasse abstrato sim mesmo que ele já tenha sido implementado na superclasse. "

Qual o sentido disso?? Obrigar subclasses da subclasse à implementacao, tirando o conteudo da super?

jopss :stuck_out_tongue:

rmala_ti

jopss:
" uma subclasse pode declarar o metodo da superclasse abstrato sim mesmo que ele já tenha sido implementado na superclasse. "

Qual o sentido disso?? Obrigar subclasses da subclasse à implementacao, tirando o conteudo da super?

jopss :stuck_out_tongue:

Jopss, pelo que eu entendi, se o método já está implementado na superclasse abstrata, não tem como obrigar as subclasses a implementá-lo.

Ex:

1-
abstract class  A{
	public void setSal(){}	
}

class B extends A{}  //não é necessário implementar

2-
abstract class  A{
	public void setSal(){}	
}

class B extends A{
	public void setSal(){} //implementando, mas não obrigatório
}
 
3-
 
abstract class  A{
	public abstract void setSal();	
}

class B extends A{
	public void setSal(){}  //implementação obrigatória, método herdado é abstrato.
}

Espero ter ajudado.

Mr_Arthur

Não, o que estava sendo falado é tipo isso:

abstract class A {

abstract void aMethod(); //declarado abstrato

}
abstract class B extends A {

void aMethod() {} //implementado

}
abstract class C extends B {

abstract void aMethod(); // definir abstract na subclass novamente

}
R

na verdade a classe abstrata que extende outra abstrata, não necessariamente precisa implementar os métodos definidos na superclasse.
Porém a primeira subclasse concreta deve implementa-los :slight_smile:

Mr_Arthur

na verdade a classe abstrata que extende outra abstrata, não necessariamente precisa implementar os métodos definidos na superclasse.
Porém a primeira subclasse concreta deve implementa-los :smiley:

Isso é fato…
O que é novo pra mim é saber que se pode definir um metodo abstrato na subclasse mesmo depois dele já ter sido implementado na superclasse.

rmala_ti

Mr_Arthur:
na verdade a classe abstrata que extende outra abstrata, não necessariamente precisa implementar os métodos definidos na superclasse.
Porém a primeira subclasse concreta deve implementa-los :smiley:

Isso é fato…
O que é novo pra mim é saber que se pode definir um metodo abstrato na subclasse mesmo depois dele já ter sido implementado na superclasse.

Bom acho que o que está fazendo é uma sobrescrição de um método normal de uma superclasse abstrata em um método abstrato em uma subclasse também abstrata.

Eu fiz uns testes e é totalmente possível.
Não sabia e nem tinha pensado nisso, o duro é entender em que situação eu usaria este tipo de sobrescrita.
:slight_smile:

jopss
foi isso q perguntei... qual será o sentido real de se usar isso??

jopss  :P

foi isso q perguntei… qual será o sentido real de se usar isso??

jopss :stuck_out_tongue:

Criado 11 de março de 2008
Ultima resposta 13 de mar. de 2008
Respostas 8
Participantes 4