Minha pergunta parece estranha, mas acredito que deve haver uma maneira de fazer isto...
Certo, a pergunta é: Como posso alterar um atributo da classe Filho através da classe Pai?
Isso eh uma pessima ideia. Pq vc quer fazer isso? [2]
thiagofesta
Seria algo assim...
Tenho uma classe chamada ModelBean() (a qual seria a pai)
Que é algo assim:
publicclassModelBean{publicvoidsetAlgo(intalgo){// SETA SEMPRE O ATRIBUTO DA CLASSE FILHO,// SEM PRECISAR CRIAR DENOVO NA CLASSE FILHO}}publicclassTesteBeanextendsModelBean{publicintalgo;// Faço na classe pai, para mim não fazer em todos os meus beans...}//ai fica simples assim:newTesteBean().setAlgo(123);
Pois bem, parece meio sem noção no inicio, mas pode ser que você imaginem outra forma...
publicclassFilhoextendsPai{privateintabc;// Alterar este ao chamar o método da PaiprotectedvoidsetNewValue(intnewValue){this.abc=newValue;System.out.println("Meu valor foi alterado para > "+newValue);}}
Entenderam? Isso a grossoooo modo, claro que tem uma série de coisas para deixar certo o código, mas o que interessa no momento é acessar ali e ser feliz!
fantomas
Se entendi bem o que vc quer, a única coisa que chega perto disso é a reflexão (reflection); onde vc pode alterar atributos e executar metodos de um objeto de forma dinamica.
Dá uma lida no assunto e vê se te atende.
flws
lcegatti
Para que declarar o atributo na classe filha então ?
Declare apenas na classe Pai e acesse-o através do método get.
Ja não resolve ?
[]'s
ViniGodoy
Se nem todas as classes terão o atributo, como que a classe pai vai saber que pode ou não fazer o set?
Claramente, há algum erro gravíssimo na sua modelagem. A idéia está cheirando mal.
thiagofesta
ViniGodoy:
Se nem todas as classes terão o atributo, como que a classe pai vai saber que pode ou não fazer o set?
Claramente, há algum erro gravíssimo na sua modelagem. A idéia está cheirando mal.
Ali ficou gambi, mas seria passada pelo atributo $nm (nome do atributo), e o valor que irá receber $vl…
Ali fiz gambi, o certo era fazer ali, mas fiz só para exemplificar
thiagofesta
fantomas:
Se entendi bem o que vc quer, a única coisa que chega perto disso é a reflexão (reflection); onde vc pode alterar atributos e executar metodos de um objeto de forma dinamica.
Dá uma lida no assunto e vê se te atende.
flws
Vou dar uma bizu nisso!
thiagofesta
ViniGodoy aqui está agora certo a parada... usar dessa forma, mas só estes metodos na classe pai...
Tenho uma classe chamada ModelBean() (a qual seria a pai)
Que é algo assim:
publicclassModelBean{publicvoidsetAlgo(intalgo){// SETA SEMPRE O ATRIBUTO DA CLASSE FILHO,// SEM PRECISAR CRIAR DENOVO NA CLASSE FILHO}}publicclassTesteBeanextendsModelBean{publicintalgo;// Faço na classe pai, para mim não fazer em todos os meus beans...}//ai fica simples assim:newTesteBean().setAlgo(123);
Pois bem, parece meio sem noção no inicio, mas pode ser que você imaginem outra forma...
Repare que setalgo está sendo invocado em TestaBean. Isso significa que vc precisa colocar a logica em TestaBean
publicclassModelBean{publicvoidsetAlgo(intalgo){// faz o que quiser, não importa }}publicclassTesteBeanextendsModelBean{privateintalgo;// privado // sobreescreve o metodo para alterar o comportamentopublicvoidsetAlgo(intalgo){super.fazAlgo(algo);// faz o que uma classe desta deve fazer normalmentethis.algo=algo;// faz alguma logica suplementar }}
Isto é um exemplo do uso de polimorfismo. O seu método "setAlgo" é polimorfico
thiagofesta
sergiotaborda:
Isso eu sei hehe…
Mas como disse nos outros tópicos…
Andei dando uma lida, e achei uma parada chamada de Late Static Bindings… acho que isso resolve meu problema
Marcio_Duran
[size=18]Late Binding[/size]
Normalmente quando um programa é escrito em uma linguagem não orientada a objetos, a chamados dos métodos(function e procedures) é determinada exatamente pela tipo da variável, em Java isto não é verdade, por que a invocação é determinado pela classe do Objeto, também conhecido como Late Binding . No código abaixo comprova o que digo na chamado do método p.mudaIdade().
Observe que foi declarado um objeto da classe Pessoa p, no entanto foi instanciando um Funcionário que é uma Pessoa, isto é válido na OOP, por que um Parent(Pai) pode comportar-se como um Child (Filho), acessando somente o que ele conhecesse.A possibilidade de redefinição de variáveis e métodos sem subclasses, em conjunto com a posssibilidade de associação dinâmica de nomes a métodos, constitui uma característica fundamental, talvez a mais distinta da programação orientada a objetos (OOP). Em outras palavras o método a ser executado, é determinado dinamicamente, conforme o tipo do objeto armazenado em "p". O mecanismo de assossiação evita que a cada chamada de métodos da classe Pessoa, seja necessário tratar o tipo do objeto alvo, para que o método adequado possa ser chamado. Como conseqüência, o programa se torna mais claro e conciso, e mais fácil de ser modificado.É comum dizer, em programação que esse trecho de código apresenta uma boa reusabilidade.Referência: Heller Philip , Simon Roberto - Complete Java 2 Certification Study Guide