Polimorfismo X Heranca[RESOLVIDO]

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.

Polimorfismo

Herança

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.

Veja se essa discussão
http://www.guj.com.br/posts/list/137852.java
ajuda.

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???

:cry:

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. :frowning:

[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