Pessoal, eu estava estudando encapsulamento no meu livro, o “Use a Cabeça! Java”, quando cheguei até a parte que fala dos métodos get() e size(). Eu entendi que get() pega um argumento passado a ele e o método set configura esse falor. Seguindo nessa linha de raciocínio, o primeiro a funcionar é get(), para depois set() entrar. Porém, no exemplo do livro, eu tive a sensação de que está ao contrário. Parece que set() entra primeiro para depois get(). Eu vou colocar abaixo o código do livro e onde pintou a dúvida para vocês darem uma olhada:
classGoodDog{privateintsize;publicintgetSize(){returnsize;}publicvoidsetSize(ints){size=s;voidbark(){if(size>60){System.out.println("Woof! Woof!");}elseif(size>14){System.out.println("Ruff! Ruff!");}else{System.out.println("Yip! Yip!");}//fim do IF}//fim do método}//fim da classeclassGoodDogTesteDrive{publicstaticvoidmain(String[]args){GoodDogone=newGoodDog();one.setSize(70);//aqui não deveria ser one.getSize()?GoodDogtwo=newGoodDog();two.setSize(8);//aqui tambemSystem.out.println("Dog one: "+one.getSize());//aqui não deveria ser one.setSize()?System.out.println("Dog two: "+two.getSize());//aqui tbm, não?one.bark();two.bark();}//fim do método main}fimdaclasse
A crica que ficou na minha cabeça é em relação a ordem em que cada método deve entrar. Se alguém puder explicar detalhadamente, passo-a-passo, como os métodos get() e set() acima estão se comportando, inclusive a ordem em que cada um entra em ação, eu agradeço. um abraço a todos.
esta correto voce instanciou 2 objetos o one e o two da classe GoodDog
“setou” os valores para esses objetos e logo abaixo usando o get vc imprimiu
pq vc axa q deveria ser o contrario??
isso serve para encapsular sua aplicaçao tente fazer 2 classes separadas a GoodDog e outra GoodDogTesteDrive separadamente ae usando o get, set e pensando como se tivesse trabalhando com banco de dados, vc vai intender melhor pq do get e set.
abelgomes
nao importa a ordem…se no seu contrutor tiver inicializando o atributo sizer com 60 entao vc so precisa dar um get…ai vai de caso para caso…
entao não fica com esse grilo na cabeça nao e continua lendo o livro la na frente vc vai sacar isso…
por exemplo se vc desse getSize antes de dar um set ele ia dar nullpointerexception pq nao tinha na da lá
Lucas_Lacerda_Gertel
Então meu velho.
Na verdade não existe uma ordem obrigatória para chamada destes métodos.
O set() você define o valor do atributo e o get() você recupera.
No caso do teu objeto GoodDog, ele primeiro define o valor 70, pois se ele utilizasse o getSize ele viria como null pois não tem um valor definido na classe.
O get() recupera o valor do atributo e o set() define.
Imagine que você não sabe se já existe um valor definido e você precisa definir um caso não exista…
Ai você chamaria primeiro o get().
6º - Manda ambos os cachorros latirem através do método ‘bark()’. Esse método faz a verificação do tamanho do cão para definir o tipo de latido.
one.bark();two.bark();
Entendeu agora?
cris.t
O que acontece no seu exemplo é o seguinte:
De acordo com o tamanho do Cachorro “Good Dog” e vai latir de um jeito.
então no seu metodo main vc cria dois objetos GoodDog e atribui o tamanho “size” para o dogOne com o valor 70, usando o método setSize(int size), e para o dogTwo com o valor 8.
Depois vc imprime no console os tamanhos que vc atribui para cada um acima, então vc usa o metodo getSize().
Ou seja primeiro vc usou o set para atribui um valor para o objeto, tanto que nos metodos set vc precisa passar um valor.
E para “pegar” o valor que vc atribuiu vc vai usar o get.
M
marcobiscaro2112
Lucas Lacerda Gertel:
Então meu velho.
Na verdade não existe uma ordem obrigatória para chamada destes métodos.
O set() você define o valor do atributo e o get() você recupera.
No caso do teu objeto GoodDog, ele primeiro define o valor 70, pois se ele utilizasse o getSize ele viria como null pois não tem um valor definido na classe.
O get() recupera o valor do atributo e o set() define.
Imagine que você não sabe se já existe um valor definido e você precisa definir um caso não exista…
Ai você chamaria primeiro o get().
É quase isso. A sua condição nunca vai ser verdadeira, pois ‘size’ é um ‘int’ e tipos primitivos nunca são null (null é apenas para referência para objetos). O correto seria:
Primeiramente, obrigado as pessoas que estão me ajudando até este momento.
Deixa eu ver se assimilei bastante coisa até agora.
No meu exemplo, set() entra primeiro porque a priori a minha variável size possui valor null. É isso? Depois é resgatado o valor com get(). Isso mesmo? Se eu estiver errado me corrijam.
Mas se eu tivesse declarado a minha variável size e já lhe atribuido um valor? Eu poderia então usar get() primeiro, passar os argumentos para set() e então mostrar um resultado num possível System.out.println?
Abraço!!! Grato!!!
Lucas_Lacerda_Gertel
Opa, verdade…
Não é null não cara é 0.
null seria se sua variavel fosse declarada como Integer e não int.
Tipo primitivo sux…rs.
Abrax
oddy.silva
É, acabei de ver esse detalhe no livro tbm. Alguém viu a minha última pergunta?
M
marcobiscaro2112
oddy.silva:
Como eu adoro o pessoal do GUJ!!!
Primeiramente, obrigado as pessoas que estão me ajudando até este momento.
Deixa eu ver se assimilei bastante coisa até agora.
No meu exemplo, set() entra primeiro porque a priori a minha variável size possui valor null. É isso? Depois é resgatado o valor com get(). Isso mesmo? Se eu estiver errado me corrijam.
Mas se eu tivesse declarado a minha variável size e já lhe atribuido um valor? Eu poderia então usar get() primeiro, passar os argumentos para set() e então mostrar um resultado num possível System.out.println?
Abraço!!! Grato!!!
O valor inicial de size é 0 (zero) e não null. E quanto a segunda parte, é isso mesmo. Se no construtor da classe (você já aprendeu sobre construtores?) você definir um valor padrão, você pode acessá-lo antes mesmo de usar um set.