Boa tarde, estou tentando fazer um projeto Java com três classes
Pessoa
Veículo
Principal
Criei um objeto Pessoa na classe Veiculo, mas na classe main não consigo alterá-lo, crie os gets e sets direitinho, mas não estou conseguindo acessá-lo, alguém poderia me ajudar?
Quero acessar o objeto pessoa, e alterálo, como tambem alterar o objeto veiculo e depois imprimir os dois…
//Classe Pessoa
package br.com.classes;
public class Pessoa {
private String cpf;
private String nome;
private String sobrenome;
private int idade;
public String getCpf() {
return cpf;
}
public void setCpf(String cpf) {
this.cpf = cpf;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getSobrenome() {
return sobrenome;
}
public void setSobrenome(String sobrenome) {
this.sobrenome = sobrenome;
}
public int getIdade() {
return idade;
}
public void setIdade(int idade) {
this.idade = idade;
}
//Classe Veiculo
package br.com.classes;
public class Veiculo {
private String placa;
private String marca;
private String modelo;
private int ano;
Pessoa pessoa = new Pessoa();
public String getPlaca() {
return placa;
}
public void setPlaca(String placa) {
this.placa = placa;
}
public String getMarca() {
return marca;
}
public void setMarca(String marca) {
this.marca = marca;
}
public String getModelo() {
return modelo;
}
public void setModelo(String modelo) {
this.modelo = modelo;
}
public int getAno() {
return ano;
}
public void setAno(int ano) {
this.ano = ano;
}
public Pessoa getPessoa() {
return pessoa;
}
public void setPessoa(Pessoa pessoa) {
this.pessoa = pessoa;
}
}
//Classe Principal
package br.com.classes;
import javax.swing.JOptionPane;
public class Principal {
public static void main(String[] args) {
Pessoa pessoa = null;
Veiculo veiculo = null;
veiculo.getPessoa().setNome(JOptionPane.showInputDialog("Digite o nome do cliente: "));
veiculo.getPessoa().setSobrenome(JOptionPane.showInputDialog("Digite o Sobrenome do cliente: "));
veiculo.getPessoa().setCpf(JOptionPane.showInputDialog("Digite o CPF do cliente"));
veiculo.getPessoa().setIdade(Integer.parseInt(JOptionPane.showInputDialog("Digite a idade do cliente")));
veiculo.setMarca(JOptionPane.showInputDialog("Digite a marca do veículo: "));
veiculo.setModelo(JOptionPane.showInputDialog("Digite o modelo do veículo: "));
veiculo.setPlaca(JOptionPane.showInputDialog("Digite a placa do veículo"));
veiculo.setAno(Integer.parseInt(JOptionPane.showInputDialog("Digite o ano do veículo")));
imprimir(veiculo);
}
public static void imprimir(Veiculo veiculo){
JOptionPane.showConfirmDialog(null, "Nome: " + pessoa.getNome() + pessoa.getSobrenome() + "\nCPF: " + pessoa.getCpf() + "\nIdade: " + pessoa.getIdade() + "\n\n\nVeículo: " + veiculo.getMarca() + veiculo.getModelo() + "\nPlaca: " + veiculo.getPlaca() + "\nAno: " + veiculo.getAno());
}
}
Espero que tenham entendido, não está compilando
Olá Kleidson!
Primeiramente, você deve instanciar um “Veiculo”, para assim você possa trabalhar com a referência deste objeto que está na memória.
Perceba que ele está null.
Segundo, como o pessoa é um atributo de “Veiculo”, chame os valores dentro do método imprimir assim:
JOptionPane.showConfirmDialog(null, "Nome: " + veiculo.pessoa.getNome() + veiculo.pessoa.getSobrenome()
+ "\nCPF: " + veiculo.pessoa.getCpf()
+ "\nIdade: " + veiculo.pessoa.getIdade()
+ "\n\n\nVeículo: " + veiculo.getMarca() + veiculo.getModelo()
+ "\nPlaca: " + veiculo.getPlaca() + "\nAno: " + veiculo.getAno());
Abraço
1 curtida
jzaires, muito obrigado consegui, instanciei um objeto veiculo na principal, e chamei do jeito que vc falou…
Abraço
1° passo - Use identação;
2° passo - Atributo dentro de método fico acessível apenas dentro deste escopo (dentro do próprio método);
3º passo - Objeto objeto = null; se chamá-lo irá dar NullPointerException, é preciso criar uma instância do mesmo;
Alguns ajustes:
[code]package agencia_de_veiculo;
import javax.swing.JOptionPane;
public class Principal {
private static Pessoa pessoa = new Pessoa();
public static void main(String[] args) {
Veiculo veiculo = new Veiculo();
veiculo.getPessoa().setNome(JOptionPane.showInputDialog("Digite o nome do cliente: "));
veiculo.getPessoa().setSobrenome(JOptionPane.showInputDialog("Digite o Sobrenome do cliente: "));
veiculo.getPessoa().setCpf(JOptionPane.showInputDialog("Digite o CPF do cliente"));
veiculo.getPessoa().setIdade(Integer.parseInt(JOptionPane.showInputDialog("Digite a idade do cliente")));
veiculo.setMarca(JOptionPane.showInputDialog("Digite a marca do veículo: "));
veiculo.setModelo(JOptionPane.showInputDialog("Digite o modelo do veículo: "));
veiculo.setPlaca(JOptionPane.showInputDialog("Digite a placa do veículo"));
veiculo.setAno(Integer.parseInt(JOptionPane.showInputDialog("Digite o ano do veículo")));
imprimir(veiculo);
}
private static void imprimir(Veiculo veiculo) {
JOptionPane.showConfirmDialog(
null,
"Nome: " + pessoa.getNome() + pessoa.getSobrenome() + "\nCPF: "
+ pessoa.getCpf() + "\nIdade: " + pessoa.getIdade()
+ "\n\n\nVeículo: " + veiculo.getMarca()
+ veiculo.getModelo() + "\nPlaca: "
+ veiculo.getPlaca() + "\nAno: " + veiculo.getAno());
}
}[/code]
Olá novamente Kleidson!
Apenas para melhorar o seu código:
Altere a acessibilidade do seu atributo pessoa para private;
private Pessoa pessoa;
Se você já possui métodos get/set para manipular tal atributo não há a necessidade de deixá-lo acessível diretamente pela
referência de veiculo, isso é até recomendado, por isso “não deixe os seus atributos expostos, e sim forneça uma interface
de uso para manipulá-los(simplificando, um método)”, encapsulando esse atributo na classe.
Exceto em algum caso específico.
No construtor de veículo instancie a pessoa:
public Veiculo() {
pessoa = new Pessoa();
}
Assim, ao invés de chamar os atributos de pessoa desta forma:
veiculo.pessoa.get....
Irá acessá-los de uma forma mais elegante e correta, perceba que você continuará manipulando os dados de “pessoa” normalmente:
public static void imprimir(Veiculo veiculo) {
JOptionPane.showConfirmDialog(null, "Nome: " + veiculo.getPessoa().getNome() + veiculo.getPessoa().getSobrenome()
+ "\nCPF: " + veiculo.getPessoa().getCpf()
+ "\nIdade: " + veiculo.getPessoa().getIdade()
+ "\n\n\nVeículo: " + veiculo.getMarca() + veiculo.getModelo()
+ "\nPlaca: " + veiculo.getPlaca() + "\nAno: " + veiculo.getAno());
}
Abraço