Propriedade privada, herda ou não herda?  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
KassiPretti
JavaEvangelist
[Avatar]

Membro desde: 13/11/2007 16:28:14
Mensagens: 306
Localização: Vila Velha - ES
Offline

Pessoal esse tópico tá rendendo heim...
E vcs falam, falam e não saem do lugar. Arrumaram diversas maneiras
de dizer a msm coisa.

Na minha humilde opinião e através de tudo que foi dito pude concluir que todas as variáveis e metodos são herdados de
uma classe, mas as variaveis "private" não são acessiveis diretamente, mas somente pelos metodos set e get. Então se uma determinada variavel
não pode ser acessada e modificada por uma outra classe no caso da
herança devemos repensar o encapsulamento da variavel.

Seria isso q eu penso

Kassiane Pretti
dicabeca
JavaEvangelist
[Avatar]

Membro desde: 12/05/2007 23:28:48
Mensagens: 458
Localização: Rio de Janeiro - RJ
Offline

qualquer coisa private nao herda,sendo variavel ou metodo,se quiserem modificar uma variavel private,crie um metodo publico,logico o metodo na classe pai onde c encontar a variavel vlw!!!!!

This message was edited 1 time. Last update was at 09/01/2008 16:42:43


"Quem um dia experimentou a emoção de ser Flamengo, nunca mais vai viver outra que se equipare"
[MSN]
soudaniel_01
JavaEvangelist

Membro desde: 11/04/2007 18:55:00
Mensagens: 419
Offline

num herda naum,..
pm
JavaEvangelist

Membro desde: 28/01/2005 12:42:15
Mensagens: 429
Offline

dicabeca wrote:qualquer coisa private nao herda,sendo variavel ou metodo,se quiserem modificar uma variavel private,crie um metodo publico,logico o metodo na classe pai onde c encontar a variavel vlw!!!!!


Logico que herda....pq vcs não fazem o download do BlueJ ou olhem do debug de qq IDE que o atributo privado do pai pertence ao filho, isto é, foi herdado.

Herança é diferente de visibilidade(acesso)

pq esta tão dificil de entender ?


Segue os prints para os mais preguiçosos

 Nome do arquivo bluej.zip [Disk] Download
 Descrição
 Tamanho 3 Kbytes
 Baixado:  68 vez(es)

 Nome do arquivo prints.zip [Disk] Download
 Descrição
 Tamanho 99 Kbytes
 Baixado:  87 vez(es)

pm
JavaEvangelist

Membro desde: 28/01/2005 12:42:15
Mensagens: 429
Offline

Olhem o atributo "nome"....
sergiotaborda
Forum Spammer
[Avatar]

Membro desde: 22/03/2005 20:57:48
Mensagens: 3179
Offline

ViniGodoy wrote:Já sei porque estamos discutindo.


Estamos conversando


Mas a definição de que herança é só uma forma de aumentar o escopo também é fraca. Você mesmo falou: "herança é o nome de uma forma especifica de aumento de escopo". E o que torna essa forma específica?
Justamente a criação de herarquias de classes. Qualquer hierarquia?


Só ha uma hierarquia em java.
Então, herança é apenas uma forma de aumentar o escopro do membros de uma classe que implicam que a classe derivada pertence na hirarquia da original.


Também não, classes friend (do C++), por exemplo, não formam herança e aumentam escopo. Classes onde se faz: class x : private Y, também não formam herança (formam relação "é implementado em termos de") e também aumentam escopo.


O que vc está dizendo aqui é que existem outras formas de aumentar o escopo, que não são a herança. Certo. Como eu disse: em java, shadowing também é uma forma de aumentar o escopo.
Por existirem várias formas de aumentar o escopo ( static seria outra) é que eu disse que a herança é uma forma especifica. É uma entre outras.

Criando sua própria API de Validação



Blog do MiddleHeaven
[WWW]
fabioissamu
JavaChild

Membro desde: 21/02/2007 16:48:46
Mensagens: 144
Localização: Rio de Janeiro
Offline

na minha opinião não herda.
Pode ocorrer coisas estranhas como o reflections
um método publico chamar um privado e assim ter um pseudo acesso, mas isso não é a definição.
É como herança múltipla, não tem, mas vc pode contornar.

se tanto faz, então escolha o melhor.
http://www.goals.com.br
Dieval Guizelini
Virtual Machine Man
[Avatar]

Membro desde: 05/07/2006 14:39:44
Mensagens: 536
Localização: Curitiba - PR
Offline

Eu estou ficando realmente surpreso com a profundidade da capacidade lógica de pensar...

Se for considerada uma classe pai que tenha uma propriedade com o modificador de acesso private e um método que lê essa propriedade, quando eu estender essa classe e fizer o uso desse método herdado, a propriedade que preserva a informação (declarada na classe pai como private) estará alocada na memória do além e naturalmente não fará parte do objeto que é uma instância da classe filha e quando um objeto dessa subclasse fizer uma leitura através desse método get, a VM do java irá romper a barreira do material e obter uma informação do além e que naturalmente NÃO FARÁ PARTE DO OBJETÖ...

Vamos continuar a conversar sobre a policromia dos cristais partidos, mesmo com quem entra, não lê os posts anteriores e repete hipoteses já derrubadas e não fundamentadas...

vw

Sun Certified Java Programmer 5.0
[WWW]
paulovittor23
JavaGuru
[Avatar]

Membro desde: 11/05/2006 14:09:41
Mensagens: 282
Localização: Santos - SP
Offline

Interessante... pensando que, todo filho é o pai de uma forma especializada logicamente a resposta teria de ser sim... acredito que as referências que dizem que não herda seja pra facilitar o entendimento do modificador de acesso apenas, não levando em conta a essencia da coisa...

Paulo Vitor
Sun Certified Programmer for the Java 2 Platform, Standard Edition 5.0
Sun Certified Web Component Developer for the Java 2 Platform, Enterprise Edition 1.4

http://www.paulovittor23.org/
[Email] [WWW] [MSN]
fabioissamu
JavaChild

Membro desde: 21/02/2007 16:48:46
Mensagens: 144
Localização: Rio de Janeiro
Offline

Vc consegue chamar o método, mas a definição é que não herda.

Por exemplo, vc herda o monitor da pessoa?
Não, porém vc consegue modificar o que é desenhado nele...

se tanto faz, então escolha o melhor.
http://www.goals.com.br
sergiotaborda
Forum Spammer
[Avatar]

Membro desde: 22/03/2005 20:57:48
Mensagens: 3179
Offline

Dieval Guizelini wrote:Se for considerada uma classe pai que tenha uma propriedade com o modificador de acesso private e um método que lê essa propriedade, quando eu estender essa classe e fizer o uso desse método herdado, a propriedade que preserva a informação (declarada na classe pai como private) estará alocada na memória


Memoria = JVM = Plataforma = Implementação
Herança = Regra = Linguagem = Teoria

Linguagem é diferente de plataforma. O que acontece na memoria não tem nada a ver com a linguagem.
A prova disso é que muitas linguagens compilam o mesmo bytecode e funcionam na mesma JVM usando a mesma memoria. É dificil de aceitar isto ? Acho que não.

Dado que o que acontece na memoria é completamente inutil para saber se ha herança ou não , porque perder tempo com esse exemplo ?

O livros não afirmam que membros privados não são herados simplesmente porque querem se didáticos, eles dizem isso porque é a verdade. A prova é que dada uma classe que extende outra vc não consegue acessar nenhum dos membros privados da classe hierarquicamente superior.

Se vc acessa um método publico i ou protegido da classe pa que por sua vez acessa a variável privada , tudo bem. Isso não prova que a clase filha tem acesso à variável privada.

Criando sua própria API de Validação



Blog do MiddleHeaven
[WWW]
Dieval Guizelini
Virtual Machine Man
[Avatar]

Membro desde: 05/07/2006 14:39:44
Mensagens: 536
Localização: Curitiba - PR
Offline

sergiotaborda wrote:
Dieval Guizelini wrote:...


Memoria = JVM = Plataforma = Implementação
Herança = Regra = Linguagem = Teoria

Linguagem é diferente de plataforma. O que acontece na memoria não tem nada a ver com a linguagem.
A prova disso é que muitas linguagens compilam o mesmo bytecode e funcionam na mesma JVM usando a mesma memoria. É dificil de aceitar isto ? Acho que não.


Depende, em que você queira aplicar, quando falamos em Java, normalmente estamos falando do conjunto todo.
Com relação a sua definição: "Herança = Regra = Linguagem = Teoria", poderia ser melhor definida que "Herança é conceito definido na OO" e a interpretação dos engenheiros da SUN com relação a este conceito é exclusivamente implementado com o uso da palavra chave extends, e conforme as especificações do JCP para as VM.

sergiotaborda wrote:
Dado que o que acontece na memoria é completamente inutil para saber se ha herança ou não , porque perder tempo com esse exemplo ?

Infelizmente não posso concordar, apenas com um conhecimento de como a ferramenta manipula a memória, IO e etc, pode-se compreender vários conceitos. Apenas para citar, que é outro ponto polêmico no Java, a passagem de parâmetros por valor ou referência.

sergiotaborda wrote:
O livros não afirmam que membros privados não são herados simplesmente porque querem se didáticos, eles dizem isso porque é a verdade. A prova é que dada uma classe que extende outra vc não consegue acessar nenhum dos membros privados da classe hierarquicamente superior.

Se vc acessa um método publico i ou protegido da classe pa que por sua vez acessa a variável privada , tudo bem. Isso não prova que a clase filha tem acesso à variável privada.


Como docente não posso "desconsiderar" a literatura normalmente aceita pela sociedade, mas como pesquisador da área de desenvolvimento eu posso afirmar dois grandes problemas com a literatura técnica, principalmente na área da informática:
1. Os tradutores normalmente não possuem conhecimento da área de informática, e quando possuem são fracos. O maior exemplo desse problema, talvez seja o livro de Inteligência Artificial do Norvig e Russellque quase conseguiu acabar com a área de IA no Brasil no fim da década de 80 e início dos anos 90.
2. O conceito de "aspectos didáticos" associados aos livros que se destinam a treinamentos ou preparação para certificações são em sua maioria ruins e apresentam metodologias que já não são mais tão utilizadas no sistema educacional do Brasil. Principalmente as metodologias baseadas em Piaget. A exemplo o livro da Kathy.

Agora, focando no conceito de OO, de herança, observe que quando uma subclasse executar qualquer código que faça uso (ou é dependente) de uma propriedade declarada com private, ela não deveria funcionar se não tivesse herdado essa característica. Logo, volto a afirmar que toda classe especializada de outra classe através do recurso de herança, seja em Java ou em qualquer linguagem do paradgima Orientado a Objetos, terá todos os recursos da classe pai.

fw

Sun Certified Java Programmer 5.0
[WWW]
francislon
JavaEvangelist
[Avatar]

Membro desde: 07/02/2007 09:27:21
Mensagens: 312
Localização: Ilhéus-BA
Offline


ViniGodoy wrote
Existe uma diferença entre a existência de um atributo e a sua visibilidade.

O que o Dieval quer dizer é que, uma classe filha herdará um atributos e métodos do pai, no sentido de que, essas estruturas existirão, serão alocadas em memória, e serão usadas pelos mecanismos internos da classe. Afinal de contas, o filho é um objeto da classe pai e nada mais natural do que ele ter absolutamente todos os atributos do pai.

Entretanto, graças às regras de escopo, esses atributos e métodos não serão visíveis na classe filha. Daí a confusão. Assim, eles são herdados (pq existem e são acessados indiretamente pelos filhos), mas não são visíveis, estão fora do escopo da classe filha.

Por isso, não é possível fazer polimorfismo de métodos privados, por exemplo. O que ocorre se sobrescrevermos métodos privados é acabarmos com métodos de escopos diferentes. Um deles será usado quando a porção do pai invocar, outro será usado quando a porção do filho invocar que, se houvesse polimorfismo, apenas o método do filho seria invocado.



Pra mim ViniGodoy foi muito feliz nessa resposta, o fato de não ser visivel naum quer dizer que não foi herdado.
Tá tudo explicado ai

"Mais vale a lágrima da derrota do que a vergonha de não ter lutado."

http://chadetecnologia.blogspot.com
[Email] [WWW] [MSN]
Zeed01
Virtual Machine Man

Membro desde: 27/10/2006 16:44:29
Mensagens: 547
Offline

Boa tarde colegas !

Nem vou dar minha humilde opinião no meio de tantos pensadores e filósofos !

Mas juro que gostaria de saber o que a Kathy diria sobre essa frase:

"p/ a prova marque SEMPRE que não herda. o livro da Kathy é bem claro, ele não ensina Java, ensina a passar na prova, é o que ela faz e MUITO bem. "



[]s
pardal_nb
Virtual Machine Man

Membro desde: 12/09/2006 08:26:06
Mensagens: 672
Offline

Uau...

Quando criei este post não pensei q daria tanta repercussão..

Quando eu acho q já formei a minha opinião sobre o assunto, vem um post e muda tudo...

(por eqt estou do lado que não herda - JVM, acessa. E, se analisar pelo conceito de OO herda.
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team