Referencias em objeto

18 respostas
hackum

Oi!
Veja: http://codepaste.net/u6x9vz

private Date birthDate;
private Date hireDate;

Nesse caso, é o mesmo que:

private String birthDate;
private String hireDate;

Mas, ainda assim eu não entendi.
Poderiam tirar minha dúvida ?

Nota: Esse Date é a classe criada por mim mesmo, e não do java.

18 Respostas

diego.sas

Posta o código da sua classe Date!

nel

Oi!

Ele postou amigo, é só clicar no link.
Eu só não entendi exatamente a sua dúvida, qual é? :slight_smile:

E como sua classe pode ser igual a String?

hackum

Oi, obrigado por me responderem!
Exatamente, o código completo para o entedimento está no link.
Bom, eu desejo tirar minha dúvida com vocês, por qual propósito, ele fez:

private Date birthDate;  
private Date hireDate;

E o que significa essas 2 linhas de código ? Parece simples, mas estou com muita dificuldade para entender.

drsmachado

Calma aí.
O que você está confundindo é quanto à classe que irá ser representada pelo objeto.

Quando você cria uma classe e coloca nela um atributo String com nome qualquer, está dizendo ao compilador que este objeto conterá todos os atributos e métodos inerentes à String.
Quando você declara um atributo como sendo do tipo “seu” Date, ele terá apenas os métodos e atributos que você programou.
Isso quer dizer que você não terá, por exemplo

public String qualquer = "qualquer";
System.out.println(qualquer.subString(0, 5));

Pois você não possui um método subString(int, int); em tua classe.

hackum

Oi!
Então, não consigui compreender a questão desse Date. Mas, como assim ? “Ele tera apenas os métodos atributos que você programou ?” No caso, a classe Date.java que Eu programei ? Mas o que exatamente ?

Me dê mais informações por favor para entender esse:

private Date birthDate;    
private Date hireDate;
nel
hackum:
Oi, obrigado por me responderem! Exatamente, o código completo para o entedimento está no link. Bom, eu desejo tirar minha dúvida com vocês, por qual propósito, ele fez:
private Date birthDate;  
private Date hireDate;

E o que significa essas 2 linhas de código ? Parece simples, mas estou com muita dificuldade para entender.

Ahh perfeito, sua dúvida é em relação ao código.
Você chegou a testar o que ocorre? Veja que ele sobrescreve o toString() em ambas as classes, Date e Employee. Quando você dá um System.out.println() é basicamente o toString(), como ele sobrescreveu, vai aparecer com um formato especifico.

Aqui:

public String toString()
    {
        return String.format("%s, %s Hired: %s Birthday %s",lastName,firstName,hireDate,birthDate);
    }

Esse toString() é do Employee perfeito? Ai no seu main ele faz:

public static void main(String args[])
    {
        
        Date birth = new Date(7,24,1949);
        Date hire = new Date(3,12,1988);
        Employee employee = new Employee("Bob", "Blue", birth, hire);
        
        System.out.println(employee);
        
    }

Vai apresentar algo como:
Blue, Bob Hired: toString() (da classe Date) Birthday toString() (da classe Date).

Consegue perceber isso? Como o método toString() foi sobrescrito, ele formata o resultado de saída de acordo com o desejado.
Consegui ser claro? :)

drsmachado

Camarada, se eu criar uma classe Aspas

public class Aspas{
  private String nome;
  public void metodo(){
   this.nome = "\"Nome\"";
  }
}

Quando eu for utilizá-la ela somente me proverá o método cujo nome é metodo. Certo?
É o único recurso que esta classe, Aspas, possui.

Agora, se eu quiser que uma variável permita, sei lá, mostrar uma String ao inverso, devo declará-la como StringBuffer e chamar o método reverse.

As classes que você cria, desconsiderando herança, só fazem o que está codificado nelas.

hackum

Desculpe!
Mas ainda sim… não consigui compreender!
Veja:

private Date birthDate;    //estou com dúvidas apenas nesses 2 códigos
private Date hireDate;

Nesse caso, eu criei birthDate como Date, mas como assim, Date? Não consigo entender. :frowning:

drsmachado

hackum:
Desculpe!
Mas ainda sim… não consigui compreender!
Veja:

private Date birthDate;    //estou com dúvidas apenas nesses 2 códigos
private Date hireDate;

Nesse caso, eu criei birthDate como Date, mas como assim, Date? Não consigo entender. :(

Alguém aqui precisa estudar muito sobre classes, orientação a objetos e coisas relacionadas.

Pense da seguinte forma, você possui uma fábrica de carros.
Independente do nome que você dê ao produto final desenvolvido, ele, obrigatoriamente, terá rodas, motor, bancos, capacidade, etc.
Além de realizar determinadas “funções” como acelerar, frear, parar, bater, etc.

Você não poderá, por exemplo, fazer seu carro subir em paredes, trocar a lâmpada da cozinha, lavar a roupa, etc, isto, por que, não são métodos inerentes a um automóvel.
Agora, poderá fazê-lo arrancar, ir de 0 a 110km/h, frear, acender o farol, ativar o pisca alerta, etc.

Automóvel é a classe.
Palio, uno, gol, ferrari, maserati, siena são os objetos.
Acelerar, frear, acender faróis são métodos.
Quantidade de passageiros, motor, cor, portas são atributos.

Entendeu?

Da mesma forma, ao declarar birthDate, você diz que este objeto contém todos os métodos e atributos que pertencem à classe Date. Ele poderá fazer tudo o que Date faz, poderá receber e devolver tudo o que Date permite. Assim como um gol, pode fazer tudo que um automóvel faz.

nel

Você sabe o que é uma classe? Se souber, continue, caso contrário, FJ-11.

Então, foi criada uma classe chamada Date, não foi?
Estas duas linhas você simplesmente as declara para uso posterior. Foi declarado na classe Employee, isso chama-se Associação.
Você tem um objeto que pertence a outro, nesse caso. Quando você instancia Employee, ele obriga que passe dois objetos do tipo Date criados por você.

//construtor para inicializar nome, data de nascimento e data de contratação public Employee(String first,String last, Date dateOfBirth, Date dateOfHire) { firstName = first; lastName = last; birthDate = dateOfBirth; hireDate = dateOfHire; }

Veja, aqui ele faz birthDate receber dateOfBirth, que é passado via construtor. Sendo assim, as duas linhas que você mostrou recebem este valor e agora possuem uma referência a um objeto e podem ser utilizadas posteriormente, que nesse caso, são usadas no toString().

Entendeu?:smiley:

hackum

Basicamente, poderá ser feita dessa forma ?

Date birthDate = new Date();
Date hireDate = new Date();
drsmachado

Pode.

hackum

drsmachado,
obrigado mais uma vez! No mais, obrigado a todos que me responderam, com o intuito de ajudar!
Mas, o que essa variavel esta referenciando ?
Ela esta chamando o que dentro da classe Date ?
O que de Date esta passando para essa variavel ?

nel

hackum:
drsmachado,
obrigado mais uma vez! No mais, obrigado a todos que me responderam, com o intuito de ajudar!
Mas, o que essa variavel esta referenciando ?
Ela esta chamando o que dentro da classe Date ?
O que de Date esta passando para essa variavel ?

1 - Referência um Objeto do tipo Date
2 - Depende, se for a sua classe ela chama os métodos de verificação de dia por exemplo, conforme consta no construtor dela (estou falando código que passou pelo link)
3 - Você está confundindo esse Data com a classe java.util.Date. Não são as mesmas coisas! Procure um exemplo que não seja tão confuso para você.

E cara, com todo o respeito, vai ler a apostila que indiquei logo acima.
Eu sei que aqui é Java Básico, mas você está tendo dificuldades em coisas muito simples, primárias. Todos já passamos por isso pois ninguém nasce sabendo, sendo assim, aconselho fortemente o estudo, desde o básico, passo a passo e de acordo com o que vai fazendo exercícios, tenho certeza que dúvidas assim vão ficar claras.

Abraços amigo.

hackum

Olá! Obrigado por me responder!
Veja:

Date birthDate = new Date();  
Date hireDate = new Date();

Nesse caso, ele referenciou o objeto do tipo Date. Ou seja, ele guardou na memória ?
Para depois chamar na classe EmployeTest para criar o desejado na memória ?

nel

hackum:
Olá! Obrigado por me responder!
Veja:

Date birthDate = new Date();  
Date hireDate = new Date();

Nesse caso, ele referenciou o objeto do tipo Date. Ou seja, ele guardou na memória ?
Para depois chamar na classe EmployeTest para criar o desejado na memória ?

Sim, tudo é tratado em tempo de execução. É claro que existe um tempo, pode-se perder a referência e entre outros fatores que façam que os objetos criado seja passiveis da Garbage Collection, mas ai é outra história. De qualquer forma, nesse caso, tudo é tratado em Runtime, portanto, é alocado em memória :slight_smile:

hackum

Olá nel!
Obrigado por responder. Imensamente grato.
Mas, agora vem a pergunta ?
Por qual objetivo ele fez isso dentro da classe Employee ? Já que ele não usou a referencia de Date ? Pelo visto ele usou apenas na classe EmployeeTest - quando ele cria o desejado na memoria.

nel

hackum:
Olá nel!
Obrigado por responder. Imensamente grato.
Mas, agora vem a pergunta ?
Por qual objetivo ele fez isso dentro da classe Employee ? Já que ele não usou a referencia de Date ? Pelo visto ele usou apenas na classe EmployeeTest - quando ele cria o desejado na memoria.

Sim, ele utilizou a referência de Date. Quando ele cria a referência no EmployeeTest dos Date ele as envia via Construtor da classe Employee e atribui essa referência a outras variavés da classe Employee. Creio que o objetivo seria mostrar Associação e como sobrescrever métodos.

Certo? :slight_smile:
Abraços.

Criado 27 de junho de 2011
Ultima resposta 28 de jun. de 2011
Respostas 18
Participantes 4