Olá galera, ontem eu estava no curso de java e o professor passou um exercicio que nao consegui resolver.
O problema é o seguinte, tenho que criar um programa que leia os dados de um funcionario e mostre em uma outra classe.
É bem simples, porém, a classe funcionario deve herdar uma outra classe, a classe Cargo.
Eu tinha que criar um construtor em funcionario com todos os atributos. Porém na hora de colocar o atributo cargo eu nao consegui.
Ai vai o meu código.
[code]package classesauxiliares;
public class Funcionario extends Cargo {
private String nome;
private Cargo cargo;
//public Funcionario(){
//}
Funcionario(String nome, Cargo cargo){
this.nome=nome;
this.cargo=cargo;//AQUI QUE TA O PROBLEMA, COMO EU COLOCO OS VALORES DOS ATRIBUTOS DE CARGO?
}
public String getNome() {
return nome;
}
public Cargo getCargo() {
return cargo;
}
}[/code]
o código da classe Cargo
[code]package classesauxiliares;
public abstract class Cargo {
private String nome;
private double salario;
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public double getSalario() {
return salario;
}
public void setSalario(double salario) {
this.salario = salario;
}
}
[/code]
Eu nao sei se deu p/ entender bem oq eu quero fazer.
Agradeço a ajuda de vcs.
Se Funcionario é filho de Cargo, porque passar o objeto Cargo no construtor?
Viajei agora
Se Funcionario é filho de Cargo, você não precisa passar o mesmo no Construtor para ter acesso aos métodos do Cargo.
Você pode usar tudo o que tem em Cargo apenas instanciando a classe Funcionario.
Exemplo:
Funcionario func = new Funcionario();
// ele ganha bem rs
func.setSalario(10000);
Veja, não tem o método setSalario(double salario) na classe Funcionaro, não implicitamente, porém, por ser filha de Cargo, você tem essa possibilidade.
Não entendi essa composição com herança, ficou bem estranho, para ser sincero.
Ops!!! Agora é que eu vi! Está bem estranho mesmo!
Sua classe Cargo é abstrata, nem dá para instanciar, quem pediu para passar o Cargo no construtor do funcionario?
É como se tu tivesse que fazer algo do tipo:
[code]Funcionario cargo = new Funcionario();
cargo.setSalario(10000);
Funcionario func = new Funcionario(“João”, cargo);[/code]
Remova a herança e faça com que a classe Cargo não seja abstrata e seu problema estará resolvido. Como o Vinicius falou um funcionário não é um cargo , mas tem um cargo.
Não entendi o porque que a classe Funcionario tenha que herdar a classe Cargo.
Neste caso, o mais conveniente e se fazer não é a herança, e sim o conceito que chamamos de “Composição de classes” assim:
package classesauxiliares;
public class Funcionario {
private String nome_func;
private Cargo cargo;
public Funcionario(){
}
public Funcionario(String nome_func, Cargo cargo){
this.nome_func = nome_func;
this.cargo=cargo; //JÁ NÃO É MAIS PROBLEMA
}
public String getNome_Func() {
return nome_func;
}
public void setNome_Func(String nome_func){
this.nome_func = nome_func;
}
public Cargo getCargo() {
if (cargo == null) cargo = new Cargo(); // Evitando o NullPointer.
return cargo;
}
public void setCargo(Cargo cargo) {
this.cargo = cargo;
}
}
// A classe Cargo não precisa ser abstrata
public class Cargo {
private String nome_cargo;
private double salario;
public String getNome_Cargo() {
return nome;
}
public void setNome_Cargo(String nome_cargo) {
this.nome_cargo = nome_cargo;
}
public double getSalario() {
return salario;
}
public void setSalario(double salario) {
this.salario = salario;
}
}
Repare que a classe Cargo não precisa ser abstrata, e com o método getCargo() da classe funcionário, ele vai instanciá-la dentro de funcionário, então voce só precisa instanciar a classe Funcionário desta forma:
// Agora instanciando Funcionario, passando o cargo como parâmetro e populando o objeto funcionario.
Funcionario func = new Funcionario();
func.setNome_Func("Ricardo Teixeira");
func.getCargo().setNome_Cargo("Presidente da CBF");
func.getCargo().setSalario(100000000000.00);