RESOLVIDO - duvida com o metodo "equals"

21 respostas
R

Bom pessoal 6 da matina e eu aqui no java. bom dia a todos ai hehehe! bom eu tenho uma interface Conta e uma classe ContaCorrente e o problema é o metodo equals dessa classe que reescrevj. A logica do metodo foi proposta pela apostila da caelum e é estranha pro objetivo de verficiar se duas contas sao iguais mas em todo caso nao estou objetivando resolver isso mas sim em erro aqui que ta dando acusado pelo eclipse.

interface Conta {
double getSaldo();
void deposita(double valor);
void retira(double valor);
void atualiza(double selic);
void setNumero(int numero);
boolean equals(Object objeto);
}
public class ContaCorrente implements ContaTributavel {
	private double saldo;
	int numero;     // aqui armazena o numero da conta pra distinguir uma conta de outra
	
...demais metodos...

	@Override
	public void setNumero(int numero) {
		// TODO Auto-generated method stub
		this.numero = numero;
	}

	@Override
	public boolean equals(Object objeto) {
		// TODO Auto-generated method stub
		Conta outraConta = (Conta) objeto;
		return this.numero == outraConta.numero;  // aqui indica erro (sublinha numero) e diz que tenho de me referir de forma estatica (qdo criei "int numero;" la)
	}
}
dai nao entendi mais pq nao vejo como certo armazenar numero de conta numa interface

ainda sugere pra mim criar o campo numero em Conta ou retirar o atributo static de “numero” em “Conta” (qdo criei o atributo la)
mas dai nao aceitou “int numero;” mas apenas “int numero = 0; obrigando a inicializar”
dai nao entendi mais pq nao vejo como certo armazenar numero de conta numa interface

alguma ideia ai ?

public interface ContaTributavel extends Conta, Tributavel {

}
public interface Tributavel {
	void calculaTributos();
}

21 Respostas

Lenin666

Bicho, muito loko esse código heim..hehe.

Só uma pergunta, vc trampou alguma vez na sua vida com C++?, pq só em C++ q eu ví "Multipla Herança".., hehe, brincadeira.

Olha, vc está meio sem conceito de JAVA. Vamos lá, eu não entendi bem oq vc tah querendo fazer, mas segue algumas dicas boas pra te ajudar a entender um pouco dos seus problemas.

Primeiro e mais importante, em java NÃO é possível Herdar (extends) mais de uma classe, porém É possível Implementar(implements) mais de uma classe, mas a título de excercício, procure saber pq não é possível herdar mais de uma classe.

Nessa classe q vc postou:
public class ContaCorrente implements ContaTributavel {   
    private double saldo;   
    int numero;     // aqui armazena o numero da conta pra distinguir uma conta de outra   
       
...demais metodos...   
  
    @Override   
    public void setNumero(int numero) {   
        // TODO Auto-generated method stub   
        this.numero = numero;   
    }   
  
    @Override   
    public boolean equals(Object objeto) {   
        // TODO Auto-generated method stub   
        Conta outraConta = (Conta) objeto;   
        return this.numero == outraConta.numero;  // aqui indica erro (sublinha numero) e diz que tenho de me referir de forma estatica (qdo criei "int numero;" la)   
    }   
}

Muda pra:

public class ContaCorrente implements Conta {   
    private double saldo;   
    int numero;     // aqui armazena o numero da conta pra distinguir uma conta de outra   
       
...demais metodos...   
  
    @Override   
    public void setNumero(int numero) {   
        // TODO Auto-generated method stub   
        this.numero = numero;   
    }   
  
    @Override   
    public boolean equals(Object objeto) {   
        // TODO Auto-generated method stub   
        Conta outraConta = (Conta) objeto;   
        return this.numero == outraConta.numero;  // aqui indica erro (sublinha numero) e diz que tenho de me referir de forma estatica (qdo criei "int numero;" la)   
    }   
}

Provavelmente isso vai eliminar um pouco dos seus problemas. Mas tenta ler com um pouco mais de calma os conceitos de herança e de implementação...

Acho que ajudei, porém, tenta detalhar um pouquinho melhor sua dúvida...

Abs();

Roberto2
<a class="mention" href="/u/override">@Override</a>

public boolean equals(Object objeto) {

// TODO Auto-generated method stub

Conta outraConta = (Conta) objeto;

return this.numero == outraConta.numero;  // aqui indica erro (sublinha numero) e diz que tenho de me referir de forma estatica (qdo criei “int numero;” la)

}

Você não deveria instanciar e fazer o casting para classe ContaCorrente?

<a class="mention" href="/u/override">@Override</a>

public boolean equals(Object objeto) {

// TODO Auto-generated method stub

ContaCorrente outraConta = (ContaCorrente) objeto;  

return this.numero == outraConta.numero;  // aqui indica erro (sublinha numero) e diz que tenho de me referir de forma estatica (qdo criei “int numero;” la)

}
C

Opa cara blz,

Não seria mais simples você colocar um metodo getNumero(); na interface e fazer o equals utilizando esse metodo, a variavel numero ta na classe não na interface, deixa o numero privado e cria um metodo que retorne ele ai você ja pode fazer o equals sem problemas.

Abraço

eduardo.exs

Complementando o que o amigo acima disse, toda classe em java automaticamente herda de um objeto genérico chamado Object, daí o fato do java não permitir herança múltipla

Se precisar trabalhar com multiplicidade de herança, irá ter que “compor” tua classe com outra, ou seja, embutir um objeto dentro de outro como uma instância da classe original

ex:

public class MeuObjeto1 extends ObjetoPai1 implements Interface1 {
      private Objeto2 objEmbutido ;
      public MeuObjeto1() {
             objEmbutido = new Objeto2() ;
      }
}

espero ter sido claro

C

Concordo que java não possui herança multipla para classe, mas pelo que eu vi no codigo a herança multipla ali é em interface o que é valido

Lenin666

Ops…, verdade, oq o CarlosDukeJP falou é verdade, pura falta de atenção da minha parte…, sorry, não quis confundir mais ainda a cabeça do rafaelczy, mas é q eu não curto muito esse tipo de abordagem (multipla herança de interface), pq vira zona num projeto um pouco maior…, mas realmente, é válido sim herdar mais de uma inteface dentro de uma outra interface(Tá vendo como fica confuso até para explicar…rs.)

Obrigado CarlosDukeJP por complementar meu comentário.

R

Lenin666:
Ops…, verdade, oq o CarlosDukeJP falou é verdade, pura falta de atenção da minha parte…, sorry, não quis confundir mais ainda a cabeça do rafaelczy, mas é q eu não curto muito esse tipo de abordagem (multipla herança de interface), pq vira zona num projeto um pouco maior…, mas realmente, é válido sim herdar mais de uma inteface dentro de uma outra interface(Tá vendo como fica confuso até para explicar…rs.)

Obrigado CarlosDukeJP por complementar meu comentário.

rsssss…apesar de iniciante tb tive essa impressao sobre herança multipla de interface - confunde e da impressao de zona mesmo
implementei o que tu disse Duke e parou de acusar erro. thank’s to all java brothers

eduardo.exs

rsssss…apesar de iniciante tb tive essa impressao sobre herança multipla de interface - confunde e da impressao de zona mesmo
implementei o que tu disse Duke e parou de acusar erro. thank’s to all java brothers

Não é uma boa prática de programação trabalhar desta forma… interface tem um aplicação específica para uso em padrões de projeto, o que faria um iniciante que se acostuma a programar desta forma gerar códigos menos legíveis, confusos e a possibilidade de cometer erros comuns de programação (como neste caso)

O consenso é que: utiliza-se interfaces para estabelecimento de contrato entre classes e objetos
dentre alguns conceitos de contrato estão (protótipos de funções, constantes globais entre outros…)
Não quer dizer que não se “pode”, mas que não se “deve” fazer. Estudar padrões de projeto pode ajudar muito neste sentido…

OBS: ajuda muito neste sentido estudar alguns modelos de diagrama de classes (esteriótipos, entidades, conectores e etc) para se ter uma idéia abstrata dos casos de uso de interfaces dentro do código…

Espero ter ajudado

fernandopaiva

Eu acho que o Java perde muito em matéria de herança multipla, eu preferiria q tivesse…Em Python eu usava muito esse recurso, economiza tempo e implementações extras, principalmente referente a GTK ou wxPython.
Mas nem tudo é perfeito.

t+

eduardo.exs

fernandopaiva:
Eu acho que o Java perde muito em matéria de herança multipla, eu preferiria q tivesse…Em Python eu usava muito esse recurso, economiza tempo e implementações extras, principalmente referente a GTK ou wxPython.
Mas nem tudo é perfeito.

t+

fernando, cada lp tem sua metodologia e especificações

o java não “incentiva” (atenção para o uso das “”) o uso de herança múltipla exatamente em função da legibilidade de código de de uma estruturação mais “clean” do conceito de POO…
C++, Python entre várias outras trabalham bem com heranças múltiplas…
Acredito que toda linguagem detenha prós e contras em relação a resolução de problemas específicos.

eu particularmente fui “realmente” aprender o paradigma de objetos com Java pela forma transparente como objetos são conceitualizados. Do meu ponto de vista C++ neste sentido é muito confuso, exigindo um nível de maturidade que talvez poderia não ser indicado para iniciantes em programação… (não quero dizer com isto que java é uma linguagem de iniciantes, muito pelo contrário)

Se formos analisar
Python é muito mais fácil de se escrever… porém muitooooo mais difícil de se ler, principalmente por alguém que conheça programação mas não domine Python. Pascal é talvez a linguagem mais legível utilizada comercialmente em larga escala, porém do meu ponto de vista a orientação à objetos do pascal (Delphi, Lazarus) é bem imatura deixando vago muito conceito necessário nos tempos atuais para se lidar com projetos de grande escala de produção.

Ou seja… cada linguagem tem seu gap e seu nível de abstração
Todas são boas senão não existiriam
Dificilmente um matemático utilizaria Java para lidar com softwares de Ánalise (matemática) e EDO (Equações Diferenciais Ordinárias). Aí talvez é onde entrariam Prolog, Haskell e C puro.

O mercado é um belo reflexo disso que falo…
Comercialmente o que é mais utilizado (em termos gerais) é: Delphi, Java, C++ para aplicações desktop geral…
Java parece que cai como uma luva em uma organização (p.e Outsourcing, fábricas de software) que utiliza mão de obra no sentido: pega->codifica->entrega por garantir uma visualização top-down do conceito de projeto de software…

Agora se estamos falando em programar sozinho (1 programador para 1 problema), dane-se a linguagem o que vale é o cara saber o que está fazendo e fazer bem feito. Porém quando se agrega uma equipe de 200 programadores, senão houver uma raíz fincada sobre o paradigma de padrões de projeto a coisa vira Caos total, talvez por isso que grandes empresas priorizem C++, Java, Delphi para seus códigos e não Python e Ruby, Lua por exemplo

eduardo.exs

Só pra complementar

O php é muito poderoso para criar web-services de modo rápido. Fazer um simples web-service em java talvez pode não ser tão bom negócio quanto fazê-lo em php.
Geralmente o mercado avulso de web-services contem em sua maioria códigos desenvolvidos em php. Agora… imaginem codificar um ERP-clouding todo em PHP. Possível é, mas… vale a pena??? Acho que iria virar uma salada maluca gigantesca e a hora que deve um pipino, muita oração iria ser necessária. Talvez por isso alguns sistemas web mais robustos sejam preferencialmente codificados utilizando-se frameworks de persistência e linguagens mais voltadas à projeto como .net e java (lembrando que: qdo digo +, não quero excluir as outras. Ja vi muita coisa realmente profissional e bem codificada desenvolvida em linguagens que eu nunca esperaria serem utilizadas para tal finalidade…)
infinitos exemplos disso…

Comercialmente ng gosta de correr riscos… por isso cria-se tradição em utilização de linguagens para determinados fins…
Imagina só se os bancos bombardeassem seus sistemas em cobol e passassem a re-trabalhar estes utilizando outra linguagem mais atual…

Tudo é uma questão de: Problema -> Necessidade -> Solução -> Custo

Abraços

fernandopaiva

eduardo

Ja trabalhei, tanto com Delphi/VB e C++/Python/Java brinquei com Ruby…O fato de Java não possuir herança multipla não se reduz a um paradigma/padrao de projeto. Pois muito se faz com muito menos. E eu digo q herança multipla eh uma mao na roda tanto pra 1 desenvolvedor como pra 200, pois eu ja participei de projetos em Python com 500desenvolvedores e correu tudo uma blz, isso vai de metodologia de trabalho e não de uma interface/class ligados a uma boa modelagem.
O fato de Java dominar o mercado, não é ter ou não ter herança multipla, e sim acredito eu pela sua praticidade/grandeza/estabilidade e principalmente portabilidade.
Python não é tão conhecido no meio como uma linguagem padrão, não como java, porém Linux/BSD/Macs enfim Unix e derivados em geral, usam Python tanto para tarefas simples como tarefas pesadas, assim como C++ e outros tbm são usados e nem por isso são foras de padroes mas sim portabilidade.
Eu disse que “sinto falta de herança multipla no java, mas nem tudo é perfeito”…Ja trabalhei com várias linguagens, como disse antes, mas sou e acredito q sempre serei apaixonado por Java eh como um casamento duradouro, pois tudo o q preciso consigo fazer em tempo hábil e melhor, portável.

eh isso, t+.

eduardo.exs

Ultima pentelhação: :smiley:

Não se deve levantar bandeiras, acredito que a melhor linguagem é aquela que garante seu arroz e feijão. Linux, Windows, Python, C, C#, Java etc
não interessa a linguagem em si o ideal (do meu ponto de vista) é ter um profundo embasamento em conceitos gerais às linguagens de programação e estar a todo momento preparado para um dia ter de “abandonar” o que se gosta para fazer o que se “deve”. Profissionalmente as coisas são assim. Sou filho de um programador que passou a vida pulando de galho em galho( BASIC, C, C++, VISUAL BASIC, COBOL, LISP etc -> tadinho do meu véi :slight_smile: ) mas por um lado hj ele mesmo fala que isso fez dele hoje um cara polivalente. Se amanhã o mercado lançar uma nova linguagem a única coisa que ele terá de aprender é sintaxe e semântica porque o resto já está “pregado” na mente…

Ja ví muito colega meu que levantava bandeira: “Linux, Java, MySQL” se recusar por idealismo a aprender outras tecnologias…
Conclusão foi que: uma hora ele quebrou a cara e teve de aprender o que estava sendo pago… inevitavelmente qualquer programador corre o risco de ficar sem emprego por escassez de serviço em determinada área ou na melhor das hipoteses ter de se adaptar ao mercado

Desculpem pela qtd de opiniões pessoais colocadas aqui, espero ter ajudado, caso contrário deixo-me à disposição de críticas

Abraços

eduardo.exs

fernandopaiva:
eduardo

Ja trabalhei, tanto com Delphi/VB e C++/Python/Java brinquei com Ruby…O fato de Java não possuir herança multipla não se reduz a um paradigma/padrao de projeto. Pois muito se faz com muito menos. E eu digo q herança multipla eh uma mao na roda tanto pra 1 desenvolvedor como pra 200, pois eu ja participei de projetos em Python com 500desenvolvedores e correu tudo uma blz, isso vai de metodologia de trabalho e não de uma interface/class ligados a uma boa modelagem.
O fato de Java dominar o mercado, não é ter ou não ter herança multipla, e sim acredito eu pela sua praticidade/grandeza/estabilidade e principalmente portabilidade.
Python não é tão conhecido no meio como uma linguagem padrão, não como java, porém Linux/BSD/Macs enfim Unix e derivados em geral, usam Python tanto para tarefas simples como tarefas pesadas, assim como C++ e outros tbm são usados e nem por isso são foras de padroes mas sim portabilidade.
Eu disse que “sinto falta de herança multipla no java, mas nem tudo é perfeito”…Ja trabalhei com várias linguagens, como disse antes, mas sou e acredito q sempre serei apaixonado por Java eh como um casamento duradouro, pois tudo o q preciso consigo fazer em tempo hábil e melhor, portável.

eh isso, t+.

concordo plenamente fernando

acrescentando que: o “gap” de herança múltipla provê uma possibilidade dentro de um padrão/modelagem
porém o que quis dizer neste sentido é que: um modelo de projeto visando o não uso de herança múltipla obriga o projetista a descrever um modelo mais fortemente orientado a relações e fluxos entre os objetos…
CLARO QUE (desculpe a caixa-alta): isto é uma opinião pessoal, assim como todos gerentes de projeto, arquitetos de sistemas, projetistas e analistas que conheci tinham um visão genérica (de problema) e uma atuação especifica (de solução)

Muito obrigado fernando, mas acho que se formos discutir isto construtivamente entre “nós” vamos combinar de criar um tópico para tal discussão pq senão vamos “fritar” a cabeça o companheiro que iniciou este tópico. :slight_smile:

Abraços

fernandopaiva

Entaum, hoje graças a Deus, tenho um emprego estável onde sou encarregado da área entaum posso dizer “Eu amo Java, e só uso Java”
Tenho projetos paralelos com Python, mas eh algo q ja penso em mudar pra Java, entaum meu amigo novamente “Eu amo Java, e só uso Java”
Ja usei muitas coisas, li muitas coisas e concordo com o q vc disse sobre sintaxe, mas novamente “Eu amo Java, e só uso Java”
Sinto falta de multipla herança, mas dou meus dribles qto a isso.
Comecei a estudar aos 15anos fazendo programinhas com Basic e Pascal, hoje com 32 so uso Java e ainda voltei pra faculdade pra fazer Eng.Civil querendo mudar pra Eng.Mecatronica(sempre quis fazer e naum tive oportunidade, pois naum havia cursos proximos, mas agora parece q vai abrir)…kkkk !!!
A vida é feita de mudanças, mas como disse hoje posso escolher qual linguagem usar e dizer “Eu amo Java, e só uso Java”, e a mudança q faço é pessoal minha uma realização estudar Eng.Civil ou Mecatronica.

entaum pra concluir: “Eu amo Java, e só uso Java”

eh isso. t+ e boa sorte ae !

eduardo.exs

Somos 2 então

Abração

Resplandes

Somos Três então…

fernandopaiva

Fechou…É nóis q tá !!! kkkk…

R

nem deu pra citar ninguem pq foram inumeros posts valiosos de vcs
cool men
hoje experimentei nao um forum
mas um congresso sobre herança e pros e contras de linguagens (mesmo q superficialmente)
thank’s all guys
:smiley:

R

to estudando de 4 a 8 horas por dia
espero logo poder ser sabio no java como vcs guys! :stuck_out_tongue:

eduardo.exs

rafaelczy:
to estudando de 4 a 8 horas por dia
espero logo poder ser sabio no java como vcs guys! :stuck_out_tongue:

só depende da tua “persistência” :smiley:

creio que como eu todos aqui esperam ver a evolução saudável de programadores brasileiros

boa sorte e boa caminhada nos estudos

Criado 21 de outubro de 2011
Ultima resposta 21 de out. de 2011
Respostas 21
Participantes 7