Estou começando em java agora e estava estudando herança e polimorfismo. Pelo que eu entendi, sendo a classe PassaroImportado filha da classe Passaro, eu poderia declarar um objeto do tipo PassaroImportado dessa forma:
Passaro p = new PassaroImportado();
afinal, todo PassaroImportado é um Passaro, então fui tentar implementar um codigo que usa dessa propriedade e tive uma certa dificuldade, pois do jeito que o código esta abaixo, ele roda perfeitamente, retornado o que eu quero retorne, porem se eu declaro da forma:
EmpregadoDaFaculdade p = new ProfessorDaFaculdade();
o código não compila, pois da erro na hora de chamar o método setHora(diz que não existe esse meétodo na classe mãe)…
gostaria que alguem me ajudasse com essa duvida dizendo o pq q quando eu declaro o objeto dessa forma
EmpregadoDaFaculdade p = new ProfessorDaFaculdade(); e não funciona, obrigado.
segue abaixo o codigo:[code]class EmpregadoDaFaculdade {
private String nome;
private double salario;
void setSalario(double salario) {
this.salario = salario;
}
void setNome(String nome) {
this.nome = nome;
}
double getGastos() {
return this.salario;
}
String getInfo() {
return "nome: " + this.nome + ", salario: " + this.salario;
}
}
class ProfessorDaFaculdade extends EmpregadoDaFaculdade {
private int horasDeAula;
void setHora(int hora) {
this.horasDeAula = hora;
}
int getHora() {
return this.horasDeAula;
}
double getGastos() {
return super.getGastos() + this.horasDeAula * 10;
}
String getInfo() {
String info = super.getInfo();
String informacao = info + ", horas de aula: " + this.horasDeAula;
return informacao;
}
}
class Relatorio {
void relata(EmpregadoDaFaculdade f) {
System.out.println(f.getInfo());
}
}
class Main {
public static void main(String[] args) {
EmpregadoDaFaculdade e = new EmpregadoDaFaculdade();
e.setNome(“Empregado”);
e.setSalario(1000);
Relatorio r = new Relatorio();
r.relata(e);
System.out.println("-----------");
ProfessorDaFaculdade p = new ProfessorDaFaculdade();
p.setNome(“Professor”);
p.setSalario(10000);
p.setHora(10);
r.relata§;
}
}[/code]