Se declarar o objeto sem instanciá-lo, ele será do tipo null
É…
Não.
Se declarar o objeto sem instanciá-lo, ele ainda será um objeto do tipo declarado, porém, terá valor nulo.
Sendo assim, se for feita alguma chamada a algum método desse objeto, a JVM lançará uma NullPointerException na linha da chamada.
R
Ricardo_Passinho
Eu não sei se entendi errado… mas pra mim estanciar um obejto dentro de outro eu faço isso dentro do contructor…
E
esdmorais
Isso mesmo! Eu me expressei errado, mas era isso q eu queria dizer rsrs.
Vou editar o post.
D
drsmachado
Parabéns, leu o post com as dicas e aplicou, isso é muito bom!
Ah, sim, quanto a este método…
[b][i][u][color=red] [/color]// Estou com dúvida neste método também[/b][/i][/u]
public void abrePorta(int escolher){
escolher = this.porta1 || porta2 || porta3;
}
Se você está usando Swing, pode usar uma JOptionPane e perguntar ao usuário qual porta. Senão, escreva no console e capture a resposta com a classe Scanner
[b][i][u][color=red][/color]// Estou com dúvida neste método também[/b][/i][/u] publicvoidabrePorta(intescolher){Stringescolha=javax.swing.JOptionPane.showInputDialog("Qual porta? (1) Porta 1 | (2) Porta 2 | (3) Porta 3");intportaSel=Integer.parseInt(escolha);if(portaSel==1){escolher=this.porta1;}elseif(portaSel==2){escolher=this.porta2;}elseif(portaSel==3){escolher=this.porta3;}}
Entendeu?
D
drsmachado
E o setter, serve para que?
E
esdmorais
Ricardo Passinho
Acho que depende muito do que vai fazer.
Se for necessário que ele seja instanciado somente uma vez, não vejo problema.
Caso esse objeto faça parte de uma iteração em alguma lista ou algo parecido, ai sim teria que ser instanciado a cada passo do laço.
K
Kah1
Obrigada pelas dicas galera, já arrumei o tópico :lol:
Acredito que também não me expressei direito!!
Bom o que eu quero é uma dica de como eu posso fazer a classe Porta, ser uma variável da classe Casa?
Isto é, caso seja realmente possível fazer isso neh!!
Minha pergunta vem pois estou lendo a apostila da Caelum para aprender um pouco de Java, pq sou mt ruim em programar :oops: e me deparei em uma situação que isso se tornou necessário e um pouco urgente, mas enfim.
Se puderem me ajudar de alguma forma ou souberem de algum site que fale sobre isso eu agradeço .
D
drsmachado
Já fez, nesta linha
Portaporta1,porta2,porta3;
Daí a ter os objetos em memória e tudo mais… É outras história…
Ah, se precisar de ajuda, faz como fez agora que sempre tem quem ajude.
J
JhowTroMundo
Pra que sua classe Casa contenha atributos porta, tudo o que você precisa é instanciar Porta dentro de Casa:
PortaportaSala=newPorta();// É boa pratica instanciar cada atributo em uma linha separada
Daí em diante (dentro de um método) é possível chamar qualquer método público de portaSala:
portaSala.abre();
por ex.
Duas coisas:
Nesse seu método de Casa:
publicvoidpintaCasa(Strings){s=this.cor;}
Você está fazendo a atribuição ao contrário.
Aconselho a usar um Switch Case neste método:
// Estou com dúvida neste método também publicvoidabrePorta(intescolher){escolher=this.porta1||porta2||porta3;}
K
Kah1
drsmachado, utilizei o método que vc passou, porém apareceu o problema que eu estou com dúvida.
Comentei nas linhas abaixo:
packagePorta;importjavax.swing.*;publicclassCasa{Stringcor;booleanaberta;Portaporta1=newPorta();Portaporta2=newPorta();Portaporta3=newPorta();publicvoidpintaCasa(Strings){s=this.cor;}publicvoidabrePorta(intescolher){Stringescolha=javax.swing.JOptionPane.showInputDialog("Qual porta? (1) Porta 1 | (2) Porta 2 | (3) Porta 3");intportaSel=Integer.parseInt(escolha);if(portaSel==1){//esta linha está dando erro Type mismatch: cannot convert from Porta to intescolher=this.porta1;}elseif(portaSel==2){//esta linha está dando erro Type mismatch: cannot convert from Porta to intescolher=this.porta2;}elseif(portaSel==3){//esta linha está dando erro Type mismatch: cannot convert from Porta to intescolher=this.porta3;}}publicStringtoString(){return"Cor Casa: "+cor+"\n\nPorta 1: "+porta1+"\nPorta 2: "+porta2+"\nPorta 3: "+porta3;}}
J
JhowTroMundo
//esta linha está dando erro Type mismatch: cannot convert from Porta to int escolher=this.porta1;
Você está tentando atribuir o valor de uma Porta numa variavel do tipo int.
Tente usar uma estrutura Switch Case, vai simplificar muito seu trabalho:
publicvoidabrePorta(){intescolha=Integer.parseInt(JOptionPane.showInputDialog(null,"Qual porta? (1) Porta 1 | (2) Porta 2 | (3) Porta 3"));switch(escolha){case1:porta1.abrir();break;case2:[..]//e assim por diantedefault:break;}}
De uma olhada na estrutura do Switch
K
Kah1
Obrigada pela dica,
Deixei o método dessa forma, mas acredito que não seja a forma correta
publicvoidabrePorta(Portaescolher){Stringescolha=JOptionPane.showInputDialog("Qual porta? (1) Porta 1 | (2) Porta 2 | (3) Porta 3");intportaSel=Integer.parseInt(escolha);if(portaSel==1){escolher=this.porta1;}elseif(portaSel==2){escolher=this.porta2;}elseif(portaSel==3){escolher=this.porta3;}}
Deixei o método dessa forma, mas acredito que não seja a forma correta
publicvoidabrePorta(Portaescolher){Stringescolha=JOptionPane.showInputDialog("Qual porta? (1) Porta 1 | (2) Porta 2 | (3) Porta 3");intportaSel=Integer.parseInt(escolha);if(portaSel==1){escolher=this.porta1;}elseif(portaSel==2){escolher=this.porta2;}elseif(portaSel==3){escolher=this.porta3;}}
O método main deve ser utilizado para criar uma instância, digamos, iniciar o aplicativo.
Todo o resto deverá ser feito em outros métodos.
Ou seja, Você pode criar um método “initApp();” assim