| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/01/2010 16:48:42
|
sinister182
Debugger
![[Avatar]](/images/avatar/7402281d0ac9a8b55a599a5f69179d4a.jpg)
Membro desde: 08/01/2009 07:08:47
Mensagens: 64
Offline
|
Boa tarde pessoa, estava estudando e apareceu a seguinte dúvida: Eu tenho uma classe que tem alguns métodos protected, existe uma segunda classe que herda da primeira esses métodos...qual a forma correta de chamar esses métodos na minha segunda classe ? eu preciso instanciar um objeto da primeira ?
o código que eu estava fazendo é o seguinte:
tentei chamar os métodos protected's na segunda classe sem instanciar um objeto mas não foi possível...está correto da forma como fiz para usar esses métodos ou não ? ( eu acredito que não pois estou usando os métodos diretamente da primeira classe correto ? e não os métodos herdados que "estão" na segunda...)
qual seria a forma correta ?
agradeço a todos que tirarem essa minha dúvida
[]'s
Marcelo
This message was edited 1 time. Last update was at 05/01/2010 21:34:39
|
SCJP -> First Target |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/01/2010 16:55:11
|
renanreismartins
GUJ Ranger
![[Avatar]](/images/avatar/b43a306ca1e27299a57727ff5c0d4998.jpg)
Membro desde: 19/09/2007 15:19:38
Mensagens: 807
Localização: São Paulo - SP
Offline
|
neste caso vc esta usando herança de forma desnecessaria... coloque o metodo main na classe TesteProtected e rodara normalmente.
Herança deve ser usada quando se quer extender funcionalidades de uma classe. ex: Professor extends Pessoa... isso é correto pq td professor é um aluno, fique atento as armadilhas da herança.
aconselho a leitura da apostila fj-11 disponibilizada no site da caelum (caelum.com.br)
abraços
|
http://renanreismartins.blogspot.com/ - Para apaixonados por desenvolvimento de software |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/01/2010 17:01:33
|
Giulliano
GUJ Master
![[Avatar]](/images/avatar/7f5a17b792b687fc4c227a5c5e569dd8.jpg)
Membro desde: 14/11/2006 19:29:38
Mensagens: 1627
Localização: São Paulo
Offline
|
renanreismartins wrote:
Herança deve ser usada quando se quer extender funcionalidades de uma classe. ex: Professor extends Pessoa... isso é correto pq td professor é um aluno, fique atento as armadilhas da herança.
Ele quis dizer que todo professor é uma pessoa, e não um aluno. Voltando ao assunto eu discordo do que foi dito pelo Renan.
Você pode usar herança caso queira sobreescrever algum método. Por exemplo a classe A tem o método "voar, andar e nadar" e você precisa implementar os mesmos métodos que existem na classe A porém com mudanças no método voar. Então você cria a classe "B extends A" e sobreescreve o método "voar".
Os outros métodos podem ser chamados diretamente da classe A se não forem necessárias alterações.
|
Oracle Certified Master, Java EE 5 Enterprise Architect
Oracle Certified Professional Java Programmer
GiuLLianO MoRRoNi
<UnTouChAbLe> |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/01/2010 17:12:23
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20578
Localização: Curitiba/PR
Offline
|
Respondendo a sua pergunta. Você chama um método protected na classe filha, como se ele estivesse na própria classe. Por exemplo: Sua dúvida apareceu pq o main é um método estático. Nesse caso, você não poderá acessar métodos não estáticos. Note que no meu exemplo, eu crei um método não estático, para poder chamar os da classe pai. E no main, crei uma instância da filha que fará uso desses métodos ao chamar fazContas().
This message was edited 1 time. Last update was at 05/01/2010 17:12:47
|
@ViniGodoy - Lattes
Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!
Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).
Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/01/2010 17:14:03
|
Tiburcio_Mancha
JavaEvangelist
![[Avatar]](/images/avatar/273ea7552f2fedc728d1462e7791434b.jpg)
Membro desde: 28/07/2008 10:34:13
Mensagens: 367
Offline
|
Ao exemplo implementado, o q esta dando errado é o seguinte:
Sua classe TesteProtected2 herda os métodos de TesteProtected, sendo que vc não precisa criar uma instãncia para acessar os métodos da classe mãe. mas ae vc cai em outro problema:
O seu método main é static e métodos static só podem chamar métodos que sejam static. A partir disto, uma implementação compilável seria esta:
Concluindo, este não seria um melhor exemplo para aprendizado, sendo que como o giulliano disse, a apostila da caelum tem uma boa base para estudo
This message was edited 2 times. Last update was at 05/01/2010 17:28:34
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/01/2010 17:15:54
|
rimarck
Entusiasta Java
Membro desde: 29/05/2008 12:06:04
Mensagens: 15
Localização: São Paulo / Goiânia
Offline
|
É que você está confundindo métodos estáticos (de classe) com métodos sem ser estáticos (de objeto)...para todo método de objeto, você terá que primeiro instânciar o objeto para depois poder utilizá-lo...tipo olha o exemplo que fiz abaixo:
Metodos estáticos (de classe) não podem invocar/chamar métodos não estáticos (de objeto) sem instanciar um objeto.
This message was edited 1 time. Last update was at 05/01/2010 17:18:38
|
Rimarck Vieira de Carvalho Junior |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/01/2010 21:15:11
|
sinister182
Debugger
![[Avatar]](/images/avatar/7402281d0ac9a8b55a599a5f69179d4a.jpg)
Membro desde: 08/01/2009 07:08:47
Mensagens: 64
Offline
|
Galera muito obrigado a todos que responderam...eu intendi o conceito de herança só implementei algo assim para ilustrar o "problema" que eu estava tendo e não em atentei para o fato de tentar chamar métodos não estaticos sem instanciar um objeto ou seja caso eu não estivesse dentro do main eu poderia tranquilamente chamar diretamente os métodos que eu havia criado.
Agradeço novamente a todos que responderam, sanaram completamente minhas dúvidas
[]'s
Marcelo
|
SCJP -> First Target |
|
|
 |
|
|