Pessoal eu gostaria de um exemplo bem simples de polimorfismo e queria entender a sua finalidade.
Qual a relacao que Heranca tem com Polimorfimso?
aguardo resposta.
Pessoal eu gostaria de um exemplo bem simples de polimorfismo e queria entender a sua finalidade.
Qual a relacao que Heranca tem com Polimorfimso?
aguardo resposta.
Herança:
Pai -> Filho
O Filho “herda” do pai algumas característica.
Polimorfismo: (poli=[color=red]muitas [/color]morfismo=[color=red]formas[/color])
Ser humano pode ser: Criança, Adulto, Adolescente, Idoso, etc, mas todos são seres humanos
Pessoa pode ser Física ou Jurídica
Física ou Jurídica tem suas peculiaridades, porém são pessoas.
Pessoal tenho uma duvida com relação a herança… tipow…
eu tenho uma Classe chamada Funcionario…
que tem o o metodo getSalarioBase;
ai eu criei um subclasse que herda de funcionario chamada FEnsinoMedio e acrescentei o método getSalario();
instanciei da seguinte forma… Funcionario func = new FEnsinoMedio();
gostaria de saber, o objeto func vai ter caracteristicas de Funcionario ou de FEnsinoMedio???
vou explicar o meu problema…
Funcionario[] func = { new FEnsinoBasico(),new FEnsinoBasico(), new FEnsinoBasico(), new FEnsinoBasico(),
new FEnsinoMedio(), new FEnsinoMedio(), new FEnsinoMedio(), new FEnsinoMedio(),
new FEnsinoSuperior(), new FEnsinoSuperior()};
eu criei esse array de funcionarios com 4 FEnsinoBasico 4 FEnsinoMedio e 2 FEnsinoSuperior todos tem um método getSalario() so que implementado de jeitos diferentes…
eu quero somar o total de todos os salarios… eu pensei em usar um for… so que ai que ta…
quando faço tipo
for( int i =0; i < func[i].length; i++ )
{
totalSalario += func[i].getSalario();
}
o metodo getSalario so esta implementado nas classes filhas e nao na classe pai…
alguem poderia me ajudar???
Você fêz como?
Foi assim?
[code]public class FEnsinoBasico extends Funcionario {
public Double getSalario() {
return new Double(10.20);
}
}
[/code]
[code]public class FEnsinoMedio extends Funcionario {
public Double getSalario() {
return new Double(30.40);
}
}
[/code]
[code]public class FuncionarioTest {
public static void main(String... args) {
Funcionario[] funcionarios = new Funcionario[]{new FEnsinoMedio(), new FEnsinoBasico()};
for(Funcionario f : funcionarios ) {
System.out.println(f.getSalario());
}
}
}[/code]
P.S Este código exemplo foi construido com o intuito de melhorar a comunicação entre os participantes (nós).
flws
[quote=itopaulo]o metodo getSalario so esta implementado nas classes filhas e nao na classe pai…
[/quote]
Você tem de declarar o método getSalario na classe pai ou como “abstract”:
public abstract double getSalario();
ou então você implementa o método getSalario na classe pai, mas faz com que ele lance uma exceção se for diretamente chamado.
public double getSalario() { throw new RuntimeException ("Não implementado"); }
No seu caso, é melhor declarar como ‘abstract’.
Ai ja consegui resolver o meu problema…
Quando instancio um variavel com a referencia de uma classe filha… o objeto criado tera todos os métodos da classe pai… e se metodos foram incluidos nas classes filhas… eles nao serao enxergados… mas
caso a classe tenha o metodos das classes filhas ( a final as filhas herdaram da pai) esses métodos estaram implementados cada um com as caracteristicas da referencia…
:shock:
Desculpem, esqueci de enviar a class mais importante da questão.
[code]public abstract class Funcionario {
public abstract Double getSalario();
}
[/code]
flws
enantiomero
heheh valeu…
eu n tinha reparado isso… eu nao tinha declarado na classe pai o metodo getSalario()…
e entendi tb q quando eu chamar o objeto: por exemplo
Funcionario func = new FEnsinoMedio();
func.getSalario();
esse objeto fucn tera as implementacoes do FEnsinoMedio neh???
hahaha puts… eu tava me matando aki para tentar entender o que tava acotnencendo…
valeu galera!!!
Eu posso declarar um metodo abstract dentro de uma classe publica???
tipo… so aquele método eu n quero que seja inicializado… caso a classe seja instanciada… so quero q esse metodo seja herdado e implementado em outras classes…
pode isso???
faz sentido ou eh sempre bom declarar abstract na classe toda?
[quote=itopaulo]Eu posso declarar um metodo abstract dentro de uma classe publica???
tipo… so aquele método eu n quero que seja inicializado… caso a classe seja instanciada… so quero q esse metodo seja herdado e implementado em outras classes…
pode isso???
faz sentido ou eh sempre bom declarar abstract na classe toda?[/quote]
Pode. Faz muito sentido.
VALEUUUUUUUUUUUUU